axios({
type:'get',
path:'/**/**',
data:data,
responseType:'blob',
fn:data=>{
//前端返回报错信息
this.getErrorMsg(data);
//导出文件流
let header = data.headers;
//获取后端导出文件定义的文件名
let fileName = header["content-disposition"].split(";")[1].split("filename=")[1];
fileName = decodeURIComponent(fileName);
let blob = new Blob([data.data]);
let eLink = document.createElement('a');
eLink.download = 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);
},
errFn:()=>{
if(data.data != undefined){
this.$message.error('数据查询失败')
}
}
})
//下面这段的作用是,由于后端导出,有时需要对入参进行校验,如果校验不通过需要返回给前端提示导出失败的原因。
//前端返回报错信息
getErrorMsg(data){
const myData = data.data;
// 如果返回格式为json,代表导出失败
let responseType = data.data.type;
if (responseType.includes("json")) {
const _this = this;
const fileReader = new FileReader();
fileReader.onload = function () {
try {
const jsonData = JSON.parse(fileReader.result);
console.log('后台返回的信息', jsonData.resultMsg);
_this.$message.error("导出失败:" + jsonData.resultMsg);
} catch (err) {
// 解析成对象失败,说明是正常的文件流
}
};
fileReader.readAsText(myData);
// 页面提示错误
// this.$message.error("导出失败,发生异常");
return;
}
}