处理文件下载失败,如何将Blob对象转换为Json?

发布于 2022-09-11 14:46:42 字数 807 浏览 12 评论 0

描述】:
axios在处理文件下载时设置了responseType:blob,期望下载失败时在前端报后端返回的错误,
但此时后端返回的错误信息Json已经被转为blob对象,请问如何将blob对象转回原来的Json呢?

或者说怎么处理拦截,因为blob对象时axios拦截器无法判断该进then还是catch。
而后端返回非200的错误状态码时又不会返回Json对象解析

相关代码

// axios配置
export function exportResult(params) {
  return noRejectRequest({
    url: ...,
    method: ...,
    responseType: 'blob', // 转换为Blob对象而不是DOMString
    params
  })
}
// api请求
exportResult({...})
.then(res => {
     ...  // 成功处理
})
.catch(err => {
     ...  // 失败处理,此时后端会返回Json格式错误
})

相似问题
axios 的responseType 类型动态设置 - Celia的回答 - SegmentFault 思否
https://segmentfault.com/q/10...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

冷清清 2022-09-18 14:46:42

一楼和二楼的方法是正确的,但是我必须加上判断 if (res.data.type === 'application/json') {……},才能够执行。在这里提醒一下诸位

花期渐远 2022-09-18 14:46:42

也可以设置responseTypearraybuffer,然后判断成功失败来决定怎么解析返回的arraybuffer

沐歌 2022-09-18 14:46:42
// 如果服务器错误返回
if (result.data.type === 'application/json') {
    let reader = new FileReader();
    reader.readAsText(result.data, 'utf-8');
    reader.onload = (e) => {
        console.log("----",JSON.parse(reader.result));
        console.log("----",JSON.parse(e.target.result));
    }
    reader.onload = function (e) {
        console.log("====",JSON.parse(reader.result));
        console.log("====",JSON.parse(e.target.result));
    }
}
没︽人懂的悲伤 2022-09-18 14:46:42
//可以现根据blob的type来判断是否是json还是stream,如果是streamname就去下载,如果是jsonname用fileReader解析blob

var reader = new FileReader();
reader.addEventListener("loadend", function() {
    console.log(JSON.parse(reader.result));
});
reader.readAsText(blob,['utf-8']);
十年九夏 2022-09-18 14:46:42

使用FileReader

var reader = new FileReader()
reader.onload = e => console.log(JSON.parse(e.target.result))
reader.readAsText(blob)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文