话不多少,直奔主题:
axios.post(url, file, {
headers: {
"Content-Type": "multipart/form-data"
},
responseType: 'blob',
}).then(res => {
const content = res.data;
const blob = new Blob([content]); //构造一个blob对象来处理数据
const fileName = `${name}.xls`;
//对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性
//IE10以上支持blob但是依然不支持download
if ("download" in document.createElement("a")) {
//支持a标签download的浏览器
const link = document.createElement("a"); //创建a标签
link.download = fileName; //a标签添加属性
link.style.display = "none";
link.href = URL.createObjectURL(blob);
document.body.appendChild(link);
link.click(); //执行下载
URL.revokeObjectURL(link.href); //释放url
document.body.removeChild(link); //释放标签
} else {
//其他浏览器
navigator.msSaveBlob(blob, fileName);
}
});
注意:
1、由于我的需求是上传文件后直接下载,所以"Content-Type"设置为"multipart/form-data",可根据自己需要修改
2、需要标明数据返会格式即responseType: 'blob',否则即使拿到流也不会下载
3、由于我的res会有code,data,message所以content取值为res.data