axios请求{ responseType: 'blob' } 判断返回type是否是application/json格式 如果是则是报错信息 如果不是则按照下载流程走 `
export function downLoadFile(url, requestData = {}) {
// 响应类型:arraybuffer, blob
axios
.post(url, requestData, { responseType: 'blob' })
.then((resp) => {
const headers = resp.headers;
const contentType = headers['content-type'];
if (!resp.data) {
console.error('响应异常:', resp);
return false;
} else {
if (resp.data.type == 'application/json') {
const reader = new FileReader();
reader.onload = function () {
const resJson = JSON.parse(reader.result);
if (resJson.message || resJson.msg) {
ElMessage({
message: resJson.message || resJson.msg,
type: 'error'
});
return;
}
//处理错误
};
reader.readAsText(resp.data);
} else {
const blob = new Blob([resp.data], { type: contentType });
const contentDisposition = resp.headers['content-disposition'];
let fileName = 'unknown';
if (contentDisposition) {
fileName = window.decodeURI(
resp.headers['content-disposition'].split('=')[1]
);
}
console.log('文件名称:', fileName);
// 非IE下载
if ('download' in document.createElement('a')) {
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob); // 创建下载的链接
link.download = fileName; // 下载后文件名
link.style.display = 'none';
document.body.appendChild(link);
link.click(); // 点击下载
window.URL.revokeObjectURL(link.href); // 释放掉blob对象
document.body.removeChild(link); // 下载完成移除元素
} else {
// IE10+下载
window.navigator.msSaveBlob(blob, fileName);
}
}
}
})
.catch(function (error) {
console.log(error);
});}`