后台返回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 取值取错就会报以上的问题,所以一点过要认真呐~~~
我是一只酸菜鱼,又酸又菜又多余~~~