let res = await download(
{ datumId: row.datumId },
{ responseType: "blob" }
);
let data = res.data;
console.log(res);
const blob = new Blob([data], {
type: "application/octet-stream",
});
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.setAttribute("download", row.fileName); // 设置下载文件名称
document.body.appendChild(link);
link.click();
document.body.appendChild(link);
}
参考这个 ,如果 你原来的文件 没问题 ,那就是 你下载方法有问题
参考 这个 https://blog.csdn.net/qq_36695838/article/details/116235914 不同的文件类型,生成 的type类型也是不同的
让后端排查下,后端网关那里的莫名其妙会影响到,还有可以在请求头加个downloadType属性,值随便传,需要后端联调,上次我也遇到了,死活都是乱码,损坏文件
解决了没
这边有解决了吗 我也是遇到这个问题 在postman是正常的 但是用blob下载后文件是损坏的
我也遇到了同样的问题,首先,后端链接在浏览器里打开能够直接下载,然后通过vue请求到blob数据之后下载打开就会说文件已损坏!查了好多办法也不行该设置的responseType: "blob"也写了。
后来解决的办法是:使用axios直接写请求,而不是使用项目封装的方法,其次在返回的时候我们要new Blob的不是res,而是res.data
以下是我请求的全部代码,希望能帮广大同仁解决问题!
axios.get(this.apiURL+"/sys/user/testExport", {
responseType: "blob" // 或者blob,GET请求用blob??有待考证
}).then(res => {
//console.log(res,6677)
// 这里的type最好参考Response Headers里面的content-type,有可能是application/vnd.ms-excel
let blob = new Blob([res.data], {
type: 'application/vnd.ms-excel; charset=utf-8'
})
//console.log(blob,122)
// 获取文件名,根据自己需要的分割
let fileName = 'aaa.xlsx'
let a = document.createElement('a')
let url = window.URL.createObjectURL(blob)
a.href = url
a.download = fileName
document.body.appendChild(a)
a.style.display = 'none'
a.click()
document.body.removeChild(a)
window.URL.revokeObjectURL(url)
})