1. 后端直接返回下载excel的地址链接excelDownUrl:
window.location.href = excelDownUrl; //直接下载excel下载地址
2. 后端返回二进制流文件,前端通过axios 通过Blob 转换excel文件流 下载乱码问题:
axios({
method: 'GET', //或者POST
url: '/api',
params: params,
responseType: 'blob',
data:param
}).then(res=>{
let result=res.data; //如果后端返回的result是进过Blob处理的,直接 window.URL.createObjectURL(result),如果没有,就需要先实例化new Blod处理之后再window.URL.createObjectURL(blob)。
let blob = new Blob([result], {type: "application/vnd.ms-excel"});
let url = window.URL.createObjectURL(blob);
let link = document.createElement('a');
link.download = "product.xls";
link.href = url;
link.click();
}).catch(err=>{
console.log(err)
})
3. 后端正常情况下res.data直接返回二进制流文件,异常情况下res.data返回{code:30000,errMsg:"参数错误"}时,前端通过axios 通过Blob 转换excel文件流是否读取json文件成功来下载excel:
axios({
method: 'GET',
url: '/api',
params: params,
responseType: 'blob',
data:param
}).then(res=>{
const fileread=new FileReader();
fileread.οnlοad=(e)=>{
try{
const message=JSON.parse(e.target.result)
console.log(message)
}catch(e){
let url = window.URL.createObjectURL(res.data);
let link = document.createElement('a');
let timer=new Date().getTime();
link.download =timer+"product.xls";
link.href = url;
link.click();
}
}
fileread.readAsText(res.data)
}).catch(err=>{
console.log(err)
})