Vue导出Excel,后端返回的文件流,前端接收后无法打开文件的解决
作者:Z兽兽
在使用Vue导出Excel时,如果后端返回文件流,前端接收后无法打开文件,通常是由于响应类型设置不正确导致的,通过设置axios请求接口时的响应类型为`blob`,并使用blob转换文件流,可以解决文件损坏无法打开的问题
Vue导出Excel,后端返回的文件流,前端接收后无法打开文件
在项目中导出excel时,提示文件损坏无法打开,但后端测试接口是没问题的,那么就前端看问题了。

1. axios请求接口时设置响应类型字段
responseType: 'blob'
2. 使用blob转换文件流
axios({
method: 'post',
url: '/download',
params: {id}, // URL 参数
data: JSON.stringify(bodyData), //body请求体
headers: {
'Authorization': userinfo.token,
"Content-Type":"application/json",
},
responseType: "blob", //设置为blob,不然导出的Excel无法打开
timeout: 60000, // 超时时间(毫秒)
baseURL: `${VITE_JAVASERVER_HOST}` //基础URL
})
.then(async(response) => {
const fileName = 'xxx';
const blob = await new Blob([response.data])
// 创建下载链接
const url = window.URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = fileName; // 设置下载文件名(可自定义)
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url); // 释放内存
})
.catch((error) => {
console.error("Error:", error);
});总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
