后台返回blob数据转JSON时遇到的问题
查询如何将后台二进制转为Blob对象的时候,统一说法就是在请求的时候添加 responseType:'blob',从而拿到的数据就是blob对象
(1)如果不在请求中设置responseType: 'blob' 文件流可以正常下载,但是打开excel时会报错。我们下载的文件是有问题的。
所以我们必须在请求中设置responseType: 'blob'
(2)这时候就来了另外一个问题。
加了responseType: 'blob' 之后,原本正确场景返回的json数据被改成了blob数据了。
所以我们要针对返回的数据做不同的处理。
正确时我们需要将blob数据转为json数据(type值为:application/json,以此作为判断条件)
// 如果返回的是json格式,将blob数据转为json数据。
if (res.data.type === 'application/json') {
let reader = new FileReader()
reader.readAsText(res.data, 'utf-8')
reader.onload = (e) => {
// JSON.parse(reader.result) 转译后的json数据
res.data = JSON.parse(reader.result)
// 处理相关逻辑...
} else {
// 文件流,下载文件逻辑...
}