前后端分离vue+axios下载文件

该博客介绍了如何使用axios在前端实现文件下载,通过设置响应类型为'blob',结合后端设置响应头,包括'Content-Type'和'Content-Disposition',确保文件能正确下载。同时,展示了后端如何设置响应头并读取资源流,将文件内容发送到前端。
摘要由CSDN通过智能技术生成

axios部分

export const download = (data) => {
  return request({
    url:'请求地址',
    method: 'post',
    responseType:'blob',   //设置响应类型
    data: data
  })
}

前端js处理响应部分进行blob字节处理下载文件

const filename = res.headers["content-disposition"];
const blob = new Blob([res.data]);
var downloadElement = document.createElement("a");
var href = window.URL.createObjectURL(blob);
downloadElement.href = href;
downloadElement.download = decodeURIComponent(filename.split("filename=")[1]);
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
window.URL.revokeObjectURL(href);   

后端下载

//设置响应头内容类型
response.setContentType("application/octet-stream");  
//添加响应头,带上文件名
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("端口导入模板.xlsx", "UTF-8"));
//暴露新加的响应头,不然前端获取不到
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); 
//获取文件名,只能取流,按这种方式取文件名,打成jar包之后取不到
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("mb/zcgl/端口导入模板.xlsx");
//流拷贝
InputStream is = new BufferedInputStream(resourceAsStream);
OutputStream os = new BufferedOutputStream(response.getOutputStream());
byte[] bytes = new byte[1024];
int num = 0;
while ((num = is.read(bytes)) != -1) {
 os.write(bytes, 0, num);
 os.flush();
 }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值