1.后端符合要求返回一个文件流,不符合返回错误信息,前端的处理方法
让后端把报错信息放在响应头里
exportResult(){
if (!this.tagTableParams.expertId) {
return this.$message.error('请选择标签')
}
axios({
method: "post",
url: process.env.VUE_APP_API_BASE_URL + "/expert/exportResult",
data: {
expertId: this.tagTableParams.expertId,
expertId: this.tagTableParams.expertId
},
responseType: "blob",
}).then((res) => {
console.log(res);
const errorHeader = res.headers['x-error-message'];
if (errorHeader) {
const decodedData = decodeURIComponent(errorHeader);
return this.$message.error( decodedData)
} else {
const blob = new Blob([res.data], {
type: "application/vnd.ms-excel",
});
let disposition = decodeURI(res.headers['content-disposition'])
// 从响应头中获取文件名称
let fileName = disposition.substring(disposition.indexOf('fileName=') + 9, disposition.length)
const 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);
}
});
}
2.前端直接下载模板文件
文件需要放在public下,不能有中文,否则会文件损坏
downloadTemplate() {
let a = document.createElement("a");
a.href = "./wenjian.xls";
a.download = "模板文件.xls";
a.target = "_blank";
//触发下载
a.click();
},