使用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)
    })
  })
}

 

你可能感兴趣的:(使用blob下载,如果下载失败, 获取到返回的json, 弹出提醒框)