POST 请求实现任意的文件下载
JAVA配合POST请求实现任意的文件下载(含前端代码)一、前言在最近项目开发中,有一需求是根据请求参数构建文件后,下载下来。 在我研究文件下载方式中,发现大部分文件请求获取是以Get请求为主的。但这种情况大部分是文件已经存在,只需要直接获取即可。 因此本次记录一下依靠POST请求进行文件的下载和返回。二、代码前置工作JAVA:Springboot、SpringMVC、hutool。JS:vu
·
JAVA配合POST请求实现任意的文件下载(含前端代码)
一、前言
在最近项目开发中,有一需求是根据请求参数构建文件后,下载下来。
在我研究文件下载方式中,发现大部分文件请求获取是以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
而不是后端设置的文件名。
更多推荐
已为社区贡献4条内容
所有评论(0)