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
}
}