下载文件 blob文件流处理失败或异常 提示失败异常信息

问题描述:
在后台正常处理后生成Excel,但是发生异常或者错误时,前端无法提示
解决方法:
查看下面代码中的返回的res和blob打印信息,由于获取返回信息里的code比较麻烦,对比正常情况和错误的情况,发现:如果后台正常返回,则blob中text内容不是json,如果异常则可以解析成json,于是,从此处入手,如果解析异常说明后端返回成功!

代码如下

upload1 (url, formData) {
    return service({
      url,
      method: 'POST',
      responseType: 'blob',
      timeout: 0,
      headers: {
        'Content-Type': 'application/json;charset=UTF-8'
      },
      data: formData
    }).then(res => { // 处理返回的文件流
      const blob = new Blob([res])
      console.log(blob)
      blob.text().then(result => {
        try {
          const jsonData = JSON.parse(result)
          if (jsonData.code && jsonData.msg) {
            alert(jsonData.msg)
          } else {
            alert('返回失败')
          }
        } catch (e) {
          const fileName = '核算明细' + new Date().toLocaleDateString() + '.xlsx'
          // 兼容IE
          if (window.navigator.msSaveOrOpenBlob) {
            navigator.msSaveBlob(blob, fileName)
          } else {
            const elink = document.createElement('a')
            elink.download = fileName
            elink.style.display = 'none'
            elink.href = URL.createObjectURL(blob)
            document.body.appendChild(elink)
            elink.click()
            URL.revokeObjectURL(elink.href) // 释放URL 对象
            document.body.removeChild(elink)
          }
        }
        // console.log(result)
        // 转换Unicode编码至中文
        // const resultStr = unescape(result.replace(/\\/g, "%"))
        // alert(resultStr)
        // console.log(resultStr)
        // console.log(typeof resultStr)
      })
    })
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值