React 请求设置了 responseType: 'blob',返回了JSON格式错误信息处理

请求下载解决乱码问题, 会给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 返回值为 JsonToast 提示给用户
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 相信都可以轻松的写出来;

fileReader 手册

你可能感兴趣的:(React 请求设置了 responseType: 'blob',返回了JSON格式错误信息处理)