用多了axios 的下载文件,突然使用原生的有点蒙;jquery 中的$.ajax() 是使用不了的,具体原因:【记录避坑AJAX处理文件流】为什么预览/下载文件是空白的?(含过程和解决方法)_jquery ajax下载文件流-CSDN博客 所以直接使用XMLHttpRequest原生写吧。
let url = '/client/down/downFile?id='+item.id; // 后端接口
let xhr = new XMLHttpRequest();
xhr.open('GET', url, true); // 也可以使用POST方式,根据接口
xhr.responseType = "blob"; // 返回类型blob
xhr.setRequestHeader('Authorization',"clientBearer " + window.localStorage.getItem("token")) // 请求头 多个再加 xhr.setRequestHeader()
xhr.onload = function () {
if (this.status === 200) {
let blob = this.response;
that.mySelfFileDown(blob,"文件.pdf")
}
};
// 发送ajax请求
xhr.send()
mySelfFileDown:function (res,name) {
try{
let fileName = name
if(!name){
try{
fileName = res.headers["content-disposition"].split("=")[1];
fileName = decodeURI(fileName); //文件名称解码
fileName = fileName.replace(/\+/g, ""); //文件名称修改
}catch (err){
fileName = "文件"
}
}
if (window.navigator.msSaveOrOpenBlob) { // IE
var objectUrl = new Blob([res.data], { type: 'application/pdf'})
navigator.msSaveBlob(objectUrl, fileName)
} else { // 主流浏览器
let objectUrl = URL.createObjectURL(new Blob([res]));
const link = document.createElement('a');
link.download = fileName;
link.href = objectUrl;
link.click();
}
}catch(err){
console.log(err,"======err======")
}
},