axios使用POST下载excel文件
2021-08-24 本文已影响0人
山上有桃子
使用axios.post(url,data,params)
向后台请求excel流文件
/**
* 处理返回的excel文件流
*/
export function exportExcel(res,name='统计') {
const blob = new Blob([res.data]);
const fileName = name + '.xlsx';
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);
}
export default {
methods:{
/**
* 导出
*/
downloadExcel(){
let data = {};
this.axios2.post('/testDownExcelUrl',data,{
responseType:'blob',
header:{
'Content-Type':'application/json;charset=UTF-8',
}
}).then(res => {
exportExcel(res,'我的账单');
})
},
}
}
如果配置了axios响应拦截器,改变了返回值结构,需要判断responseType == "blob"
来根据自己需要返回对应的数据结构。
// axios 相应拦截器
axios.interceptors.response.use(
response => {
if (response.config.responseType == "blob") { //返回类型为流形式的文件
if (response.status === 200) {
return response
} else {
return Promise.reject(new Error('请求异常'));
}
} else {
let res = response.data
if (res.code === 1) {
return response.data
} else {
Message({
message: res.message,
type: "error",
duration: 5 * 1000
});
return Promise.reject(new Error(res.message||'请求异常'));
}
}
},
error => {
Message({
message: error.message,
type: "error",
duration: 5 * 1000
});
return Promise.reject(error)
}
);