如何将blob返回值转换为json格式

今天遇到一个问题,前端通过调取后端接口下载excel,后端返回的是两种情况:

(1)用户权限不足,后端返回json格式,如下图:
在这里插入图片描述
(2)有权限,能够正常下载,后端返回二进制流,如下图:
在这里插入图片描述
封装axios时, responseType: ‘blob’,将影响第一种情况读取reponse为blob,不能直接读取code和msg,此时就需要将blob的内容转成文件读取,不能取消responseType: ‘blob’,取消会影响正常下载
在这里插入图片描述
调接口,根据response.data里的type去判断,返回的类型

  if(response.data.type=='application/json'){
    const reader  = new FileReader();  //创建一个FileReader实例
     reader.readAsText(response.data, 'utf-8'); //读取文件,结果用字符串形式表示
     reader.onload=function(){//读取完成后,**获取reader.result**
      const  {msg}  = JSON.parse(reader.result);
      this.$Message.error(msg); //弹出错误提示
     }
   }

如果需要显示二进制流:

 var blob = new Blob([response.data]);
 var downloadElement = document.createElement("a");
 var href = window.URL.createObjectURL(blob); //创建下载的链接
 downloadElement.href = href;
 downloadElement.download = "下载的文件"+ ".xlsx"; //下载后文件名
 document.body.appendChild(downloadElement);
 downloadElement.click(); //点击下载
 document.body.removeChild(downloadElement); //下载完成移除元素
 window.URL.revokeObjectURL(href); //释放掉blob对象
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值