设置responseType:Blob之后,接口确实返回了正常的错误对象,包含错误码和错误信息,但是因为是blob数据类型,所以json被当成文件下载下来了,需要在axios里做如下设置
axios
.get('/api/download', {
responseType: 'blob',
})
.then(response => {
const reader = new FileReader();
fileReader.readAsText(response.data);
reader.onload = () => {
try {
// 说明是普通对象数据,后台转换失败
const jsonData = JSON.parse(response.data);
console.log('jsonData:', jsonData);
resolve(jsonData);
} catch (err) {
// 到这里是正常的文件流
// 获取header里的文件名
if (Object.keys(response['headers']).includes('content-disposition')) {
const fileName = response['headers']['content-disposition']
.split(';')[1]
.split('filename=')[1];
// 重新定义res
const res = {
fileName: fileName,
data: response.data,
};
resolve(res);
}
}
};
})
.catch(error => {
console.error(error); // 错误提示信息
});