Skip to content
文章目录

接口返回blob和json两种格式时-前端处理方式

为什么会有这种情况?

下载文件或者导出的接口一般会返回字节流数据,但当后端出现异常时,返回的是 json 字符串,但是 responseType 只能设置一种格式,这时只能设置 responseType="blob"或者 responseType="ArrayBuffer",当返回 json 时,我们把 blob 或者 ArrayBuffer 格式转为 json 即可。

将 blob 类型的二进制流转换成 JSON 格式

以下是接口返回 json,但是因为前端设置了 responseType="blob",所以 response 是 blob 类型。

ts
import axios from 'axios'

const response = axios.get('http://test.api.com/download-file/1')

const blob = response.data
if (blob.type === 'application/json') {
  // 将blob转为json
  let reader = new FileReader()
  reader.addEventListener('loadend', () => {
    // 将会打印json格式
    console.log(JSON.parse(reader.result))
  })
  // 如果转换完中文出现乱码,可以设置一下代码
  reader.readAsText(blob, 'utf-8')
} else {
  // 按照正常的文件下载流程处理
}

参考资料

接口返回 blob 和 json 两种格式时,前端怎么处理

File、Blob、ArrayBuffer 等文件类的对象有什么区别和联系