首页 > 其他分享 >【Issues】axios如何获取responseType为blob的请求的错误信息

【Issues】axios如何获取responseType为blob的请求的错误信息

时间:2023-05-08 12:45:39浏览次数:45  
标签:responseType axios 错误信息 JSON Blob error data response blob

问题背景

axios请求下载文件时会设置responseType: 'blob’来处理,此时如果响应数据错误,则无法下载文件且同时没有把相关的错误信息提示处理。因为返回的是Blob 对象,无法获取到普通对象中的错误信息。

例如:

{"code":450002,"data":null,"msg":"下载出错"}

这就需要在下载文件时做响应数据的处理。以下是通过axios响应拦截器的处理。

解决方案

1、首先判断响应数据Bolb类型,如果错误信息是一个 JSON 格式的 Blob,那么读取 Blob 的内容并解析为 JSON 对象

axios.interceptors.response.use(
  response => {
    // 对响应进行处理
    return response;
  },
  error => {
    // 处理请求错误
    if (error.response && error.response.data instanceof Blob && error.response.data.type === 'application/json') {
      // 如果错误信息是一个 JSON 格式的 Blob,那么读取 Blob 的内容并解析为 JSON 对象
      return error.response.data.text().then(text => {
        const json = JSON.parse(text);
        console.log(json);
        // 返回一个包含错误信息的 Promise 对象
        return Promise.reject(json);
      });
    }
    // 如果错误信息不是一个 JSON 格式的 Blob,那么返回原始的错误对象
    return Promise.reject(error);
  }
);

在这个示例中,我们检查了错误对象的 response.data 是否为 Blob 对象,且 MIME 类型为 application/json,如果是,我们就使用 text() 方法将 Blob 对象的内容读取为字符串,然后解析为 JSON 对象并打印出来。最后,我们返回一个包含错误信息的 Promise 对象,以便后续处理。

2、如果错误信息是正常响应返回的,那Bolb的类型则需要在response里面去处理,例如:

axios.interceptors.response.use(
response => {
if (response.data) {
  // 判断Bolb类型是否有错误信息
  if (
      res.data instanceof Blob &&
      res.data.type === 'application/json'
  ) {
    let reader = new FileReader()
      reader.readAsText(res.data, 'utf-8')
      reader.onload = function(e) {
          let data = JSON.parse(e.target.result)
          if (data.code !== 0) {
              Message.error(data.msg)
          }
      }
      return Promise.resolve(res)
  }
})

标签:responseType,axios,错误信息,JSON,Blob,error,data,response,blob
From: https://www.cnblogs.com/GeniusLyzh/p/17381365.html

相关文章

  • 在vue中使用axios的步骤(保姆级)
    一、基础用法1.安装axiosnpmiaxios2.引入axios//引入axiosimportaxiosfrom'axios'3使用//发起一个post请求axios({method:'post',url:'http://192.168.0.88:8888/api/private/v1/login',data:{username:'admin'......
  • 下载文件(Excel)功能,后端返回blob字节流,前端怎么处理?
    在做大屏数据项目有个报表下载的功能,根据用户选择的时间下载对应时间的报表,后端返回的是文件流,前端需要怎么去处理呢?实现的功能效果: 后端返回的数据:需要我们处理的乱码:前端代码:1exportExcel(){2axios({3methods:"xxxx",4url:"xxx/xxxx/xx......
  • vue中配置使用axios
    简单示例代码:请求网络的js逻辑,可以放到request.js文件中,放在目录utils下;importaxiosfrom"axios";axios.defaults.withCredentials=true;//创建axios实例constinstance=axios.create({//`headers`请求头的通用配置headers:{//'X-Requested-W......
  • Axios 面试题
    一、Axios是什么?Axios是一个基于promise的网络请求库,可用于node.js和浏览器中。它是isomorphic的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.jshttp模块,而在客户端(浏览器端)则使用XMLHttpRequests。特性1.从浏览器创建XMLHttpRequests,从node.js创......
  • 如何将input里面的数值传输到servlet后台(利用vue+axios实现)
    相关步骤1、为input输入框加一个属性v-model2、并相应设置一个button3、vue里面的data定义上这个v-model值4、因为获取到了相关的数值,需要将其传递到后台,用post方式5、定义我们需要传递到url的数据完成!......
  • Vue 异步通信Axios
    使用Axios实现异步通信需要先导入cdn:<scriptsrc="https://unpkg.com/[email protected]/dist/axios.min.js"></script>使用到的数据data.json{"name":"kuang","url":"https://www.bilibili.com/?spm_id_from=333.788.0......
  • 【解决】axios 下载文件 Failed to read the 'responseText' property from 'XMLHttp
    主要解决以下两个问题问题一:idm一些网站不允许请求同一文件两次故障原因:IDM在发神经因为它检测到浏览器集成插件未安装,所以诱导你安装。实际上,装了插件问题也会出现。改参数都没用。1.很可能是你点击网页的下载链接有问题(换个网页下载试试,就不提示了),Edge浏览器一直会欺......
  • 使用Axios下载Nignx文件,并重命名
    需求:因为下载的nginx的文件地址是UUID组成的,要下载呢就需要用axios。然后结合我上一篇文章,把nginx的跨域打开。http://localhost:8085/project_1/2023/04/27/C9E9CC592AF849F7BFA025F16E2271BD.sqlhttps://www.cnblogs.com/pphboy/p/17360526.htmlexportfunctiondownloadFil......
  • c# winform 读取oracle中blob字段的图片并且显示到pictureBox里,保存进库
    privatevoidbutton2_Click(objectsender,EventArgse){ OracleConnectionconn=dbc.getConnection();//获得conn连接 try { conn.Open(); OracleCommandcmd=conn.CreateCommand(); cmd.CommandText="SELECTzpFROMkk.kkbjWHERExh=2345";//查......
  • c# winform Socket多文件传输并把传输文件保存到Oracle数据库Blob字段里
    服务器接收端代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Threading;usingSystem.......