请求的时候需要加上 responseType: "arraybuffer" ,不然下载好的文件打不开。注:不是在headers里
项目的后端是通过若依框架导出的二进制流数据通过接口传递了过来给到前端,二进制流格式如下图
拿到这个二进制流入new Blob([res.data] 中 ,代码如下。就会自动下载并打开。
filename为导出的xlsx文件的名字,可以自定义修改
let blob = new Blob([res.data], {
type: 'application/octet-stream'
}); // 转化为blob对象
let filename = '未提交需求.xlsx'; // 判断是否使用默认文件名
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, filename);
} else {
var blobURL = window.URL.createObjectURL(blob); // 将blob对象转为一个URL
var tempLink = document.createElement('a'); // 创建一个a标签
tempLink.style.display = 'none';
tempLink.href = blobURL;
tempLink.setAttribute('download', filename); // 给a标签添加下载属性
if (typeof tempLink.download === 'undefined') {
tempLink.setAttribute('target', '_blank');
}
document.body.appendChild(tempLink); // 将a标签添加到body当中
tempLink.click(); // 启动下载
document.body.removeChild(tempLink); // 下载完毕删除a标签
window.URL.revokeObjectURL(blobURL);
}