繁花似锦觅安宁,淡云流水度此生。
缘深缘浅随它去,花开花落总归尘。

后台返回blob数据转JSON时遇到的问题

有一个业务场景:批量导入数据时,导入excel,如果成功,后台返回成功的json数据。如果批量导入失败,后端会返回excel文件流告知是哪几条数据出错。

也许你会遇到这样的问题:

(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 {
   // 文件流,下载文件逻辑...
}    

这个地方稍有不注意就会遇到 Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'. 其实就是太粗心的问题哦~

reader.readAsText(res.data, 'utf-8')  // res.data 取值取错就会报以上的问题,所以一点过要认真呐~~~

 

posted @ 2021-07-02 16:40  良人非良  阅读(1167)  评论(0编辑  收藏  举报