请求下载解决乱码问题, 会给XHR 的
responseType
指定为blob
或者arraybuffer
; 但请求返回值不一定是二进制流数据, 实际项目网关
统一返回json
格式错误信息; 需要前端以toast
提示给用户
举例:请求接口
export const getFile = (params?) => {
// useAxios.ajax 是请求封装函数
return useAxios.ajax({
url: '***********',
method: 'get',
responseType: 'blob',
params: { ...params },
});
};
getFile(); //执行下载
Axios 拦截 Blob
返回值为 Json
并 Toast
提示给用户
service.interceptors.response.use((res) => {
const { data } = res;
if (data instanceof Blob) {
if (res?.headers['content-disposition']) {
return res;
} else {
if (res.headers['content-type'].includes('json')) {
const reader = new FileReader();
reader.onload = () => {
const { result }: any = reader;
const errorInfos = JSON.parse(result);
const { msg } = errorInfos;
console.log(msg); // 错误信息
};
reader.readAsText(res.data);
}
}
}
}
注意:
前端使用时,一定要要求后端精准的返回 content-type
;
是二进制流数据 content-type
必须是 content-disposition
;
是Json格式 content-type
必须是 application/json
;
本文重点 fileReader
只要了解 fileReader
相信都可以轻松的写出来;