axios设置responseType: ‘blob‘,获取接口返回的错误信息

在axios的请求中当后端接口返回的是文件流的情况下,我们需要在请求参数里面设置responseType: ‘blob’,如果接口报错,默认前端这里是引用无法获取后端返回的错误信息。

解决方法:通过FileReader获取错误信息

    async handleFetch() {
      const res = await reportExport({
        groupCode:timeForm.rowItem.code,
        startTime: timeForm.dateArr[0],
        endTime: timeForm.dateArr[1],
      })
      console.log(res)
      // 错误处理
      if(!res.headers['content-disposition']) {
        const fileReader = new FileReader()
        fileReader.readAsText(new Blob([res.data], { type: 'application/octet-stream' }), 'utf-8')
        fileReader.onload = () => {
          const result= JSON.parse(fileReader.result)
          console.log(result?.msg || result?.message) // 错误提示信息,根据接口返回内容不同
        } 
      }
    }

1.接口正确返回的文件流
在这里插入图片描述

2.接口返回错误,处理过后打印的结果result
在这里插入图片描述

根据引用\[1\]和引用\[2\]的内容,如果你想在Vue中使用axios设置responseType,你可以尝试注释掉引入mockjs的代码,并在源码中的dist/mock.js文件的约8683行处添加一行代码this.custom.xhr.responseType = this.responseType。这样做可以解决mockjs拦截响应设置responseType无效的问题。 另外,根据引用\[3\]的内容,如果你在上传音频文件时遇到问题,浏览器可能会返回一串乱码字符串而不是Blob类型。你可以尝试在axios请求中添加responseType: "blob"来指定返回数据类型为Blob文件。如果这个方法仍然无效,你可以参考一位大佬的博客文章,他提供了关于vue axios设置responseType:'blob'无效的问题的解决方案。 #### 引用[.reference_title] - *1* *3* [vue axios(获取文件乱码)设置返回值类型responseType:‘blob‘无效](https://blog.csdn.net/sinat_36359516/article/details/119641566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [vue axios(下载文件)设置返回值类型responseType:'blob'无效的问题](https://blog.csdn.net/weixin_42142057/article/details/97655591)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值