本文共 1602 字,大约阅读时间需要 5 分钟。
在最近项目开发中,有一需求是根据请求参数构建文件后,下载下来。
在我研究文件下载方式中,发现大部分文件请求获取是以Get请求为主的。但这种情况大部分是文件已经存在,只需要直接获取即可。
因此本次记录一下依靠POST请求进行文件的下载和返回。@RestController@RequestMapping("/api/file")public class FileController { @PostMapping public void getFile(@RequestBody PostEntity entity, HttpServletResponse response) throws IOException { File file = new File("E:\\aa.zip"); FileReader reader = new FileReader(file); // 使用hutool的开发工具包 byte[] bytes = reader.readBytes(); response.addHeader("content-type", "application/x-msdownload");//浏览器自己辨别文件类型 response.addHeader("Content-Disposition", "attachment; filename=" + file.getName()); response.addHeader("Content-Length", String.valueOf(bytes.length)); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(bytes); outputStream.flush(); outputStream.close(); }}
this.$http .post("http://localhost:8000/api/file", { name : '123'}, { responseType: 'blob', // 必填。 } ).then(res => { // 实质通过a链接触发文件下载 let data = res.data let url = window.URL.createObjectURL(new Blob([data])) let link = document.createElement('a') link.style.display = 'none' link.href = url link.setAttribute('download', 'form.zip') // 需要文件名字 document.body.appendChild(link) link.click() })
下载的文件的名字为js代码设置的form.zip
而不是后端设置的文件名。
转载地址:http://bxgwi.baihongyu.com/