axios 设置 instance.defaults.responseType = 'blob’请求下载导出一个文件,请求成功时返回的是一个流形式的文件,正常导出文件。但是请求失败的时候后端返回的是 json ,不会处理错误信息,而是直接导出包含错误信息的文件。这样拿到 data 中的数据就只有 size type 类型
这种情况,通常在封装的 axios 中我们都是以后端返回的 code 值进行判断,因此就没有办法获取到后端返回的错误信息进行提示;
因此我们有俩个思路
要不给后端传 instance.defaults.responseType = 'json’格式 然后请求成功之后将 json 格式转化成 blob 在进行导出
要不就是给后端传 instance.defaults.responseType = 'blob’请求失败之后讲 blob 转化成 json 格式,
这里介绍 blob 转化成 json 格式:
service.interceptors.response.use( | |
response => { | |
if (response.headers['content-type'] === 'application/json') { | |
const res = response.data | |
// 导出失败之后的处理 | |
if (res.size) { | |
// 将 blob 转为 json | |
const reader = new FileReader() | |
let parseObj = null | |
reader.readAsText(response.data, 'utf-8') | |
reader.onload = function() { | |
parseObj = JSON.parse(reader.result) | |
Message.error(parseObj.message || 'Error') | |
} | |
return Promise.reject(new Error(res.message || 'Error')) | |
} | |
} else { | |
return response | |
} | |
} |