导出⽂件,responseType设置了blob,实际返回了JSON格式的
错误信息的处理⽅式
需求:导出⽂件
问题描述:由于后台直接返回的⽂件流,在请求下载的⽅法中将XHR 的 responseType 指定为 blob 或者 arraybuffer。但并不是每次的操作都是成功的,所以在接⼝错误时后台返回的就是不是⼆进制流格式了。因此这⾥需要获取到后台反馈的错误信息进⾏⽤户提⽰。
这时后台返回的数据类型就是这样的:
⽽接⼝返回的是json的数据信息{“msg”: "导出失败", code: 1007}
解决代码⽰例:
getFiles(_path, query) {
axios({
method: 'get', // 请求⽅式
headers: {
'Content-Type': 'application/octet-stream',
'token': ken
},
url: _path, // 请求路径
params: query,
responseType: 'blob'
}).then(res => {
const data = res.data;
if (pe == 'application/json') {
// json信息展⽰
this.handlerResponseError(data);
} else {
// 下载⽂件流
const filename = Caption(res.headers['content-disposition']);
const blob = new Blob([res.data], {
type: 'application/octet-stream'
});
const objectUrl = ateObjectURL(blob);
const link = ateElement('a');
link.href = objectUrl;
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();// 点击
veChild(link); // 下载完成移除元素
vokeObjectURL(URL); // 释放掉blob对象
}
}).catch((err) => {
console.log(err, 'err');
});error parse new
},
handlerResponseError(data) {
const _this = this;
const fileReader = new FileReader();
try {
const jsonData = JSON.sult); // 说明是普通对象数据,后台转换失败
console.log('后台返回的信息',jsonData.msg);
// dosomething……
} catch (err) { // 解析成对象失败,说明是正常的⽂件流
console.log('');
}
};
},
// or
handlerResponseError2(data){
const reader = new FileReader();
load = (e) => {
const {message} = JSON.sult);
this.$("err:" + message);
}
adAsText(data);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论