正常在使用axios接口封装后。碰到需要下载文件的接口,我们都需要一个添加一个responseType: "blob"的参数,如果正常返回的话是没有问题的,但是如过报错,然后需要使用后端返回的提示信息,不能使用自己的提示信息那么修改如下:
exportFile(res, headers,selfError) {
if (Object.prototype.toString.call(res) === "[object Blob]") {
const fileReader = new FileReader();
fileReader.onload = function (e) {
try {
const blob = new Blob([res]);
const fileName = headers["content-disposition"].match(
/filename="(\S*)"/
)
? headers["content-disposition"].match(/filename="(\S*)"/)[1]
: headers["content-disposition"].match(/filename="?(\S*)"?/)[1];
// console.log(fileName);
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName);
} else {
// return;
const elink = document.createElement("a");
elink.download = decodeURIComponent(fileName);
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
}
} catch (err) {
//这里是关键start
//使用后台返回的错误信息
if(selfError){
let errorMessage = JSON.parse(fileReader.result).message;
Message({
type: "warning",
message: errorMessage,
});
//end
}else{
//使用自定义的错误信息
Message({
type: "warning",
message: "导出失败",
});
}
}
};
fileReader.readAsText(res);
}
},