前端JS下载文件重命名与后端Java代理方案

作者:百宝袋时间:2026-10-22 03:54:28浏览:146

前端使用HTML5的download属性可直接下载文件,但无法修改文件名。本文介绍通过Java后端代理请求,获取文件流后动态设置Content-Disposition头,从而实现前端调用时指定新文件名的完整方案。

前端JS下载与重命名限制

在前端实现文件下载功能,可以直接利用HTML5的<a>标签,并为其添加download属性即可完成基础下载操作。


var a = document.createElement("a");
a.href = "http://XXX.com/audioStream/8a9dbae9d0859e48fc1f590fcf6d4ccc.mp3";
a.download ="test.mp3";
a.click();

然而,若需要在下载过程中对文件进行重命名,仅靠前端JavaScript通常无法直接实现该功能。

为此,可以采用后端代理的方式来解决。具体做法是利用Java后台发起HTTP请求获取目标文件,在返回前端时通过响应头设置文件名,从而将带有新名称的文件流传递给用户。

Java后端代理实现文件重命名


public void downFiles(HttpServletResponse response,String url,String workInfoId,int type){
  try{
   String prefix = type == 1 ? "wav" : "txt";
   url = type == 1 ? url : (url + "?textInfoId="+workInfoId);
   HttpEntity entity = Request.Get(url).
     execute().returnResponse().getEntity();
   byte[] bys = EntityUtils.toByteArray(entity);
   //获取作品名称
   Works works = this.worksDao.findByWorkId(workInfoId);
   String name = (works!=null && StringUtils.isNotBlank(works.getName())) ? works.getName() : Long.toString(new Date().getTime());
   response.setHeader("Content-Disposition", "attachment; filename="+ new String(name.getBytes("utf-8"), "ISO-8859-1")+"."+prefix);
   OutputStream out = response.getOutputStream();
   out.write(bys);
   out.close();
  }catch (Exception e){
   e.printStackTrace();
  }

 }

上述内容涵盖了前端限制与后端解决方案的核心逻辑,旨在为相关开发需求提供参考。

作者最新文章