使用blob下载,如果下载失败, 获取到返回的json, 弹出提醒框

使用  new FileReader 读取返回,如下

let reader = new FileReader()
reader.readAsText(response.data, 'utf-8')
reader.onload = (e) => {
  try {
    let result = JSON.parse(e.target.result)
    resolve(result)
  } catch (err) { // 正常下载
    resolve(response)
  }
}

如果是返回的json, 就可以执行 JSON.Parse, 返回, 如果是文件流, 就 catch, 直接返回去下载.

完整代码如下, 记录一下, 避免忘记, 因为涉及参数加密, 会有些多余的代码,仅供参考

 

export function fetchDownLoad (url, param) {
  return new Promise((resolve, reject) => {
    getconfig(1, param)
    let paramAes
    if (instance.defaults.headers.common['isLock']) {
      paramAes = encryption.aes.en(JSON.stringify(param))
    } else {
      paramAes = param
    }
    instance.post(url, paramAes, {responseType: 'blob'}).then(response => {
      if (instance.defaults.headers.common['isLock']) { // 加密
        let reader = new FileReader()
        reader.readAsText(response.data, 'utf-8')
        reader.onload = (e) => {
          try {
            let result = encryption.aes.de(JSON.parse((e.target.result)))
            result = JSON.parse(result)
            resolve(result)
          } catch (err) { // 正常下载
            resolve(response)
          }
        }
      } else { // 不加密
        let reader = new FileReader()
        reader.readAsText(response.data, 'utf-8')
        reader.onload = (e) => {
          try {
            let result = JSON.parse(e.target.result)
            resolve(result)
          } catch (err) { // 正常下载
            resolve(response)
          }
        }
      }
    }, err => {
      reject(err)
    }).catch((err) => {
      reject(err)
    })
  })
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值