导出 文件流 和 导出 base64 文件流

// 全局公共下载方法
  downloadFile(data, name = '导出文件', type = 'xlsx') {
    if (!data) {
      return
    }
    if (data.data.type === 'application/json') {
      // json 流数据处理
      const reader = new FileReader()
      reader.addEventListener('loadend', (data) => {
        // 会有一个target属性里包含了返回的JSON
        if (data.target && data.target.result) {
          let result = data.target.result
          // 进行自定义校验
          if (typeof result === 'string') {
            result = JSON.parse(data.target.result)
            console.log('result:', result)
            // 自定义处理
            if (result.code !== '000000') {
              Message.warning(result.message)
            }
          }
        }
      })
      // 数据解析为json,理解为读取文件数据
      reader.readAsText(data.data)
      return
    }
    const isIE = (!!window.ActiveXObject || 'ActiveXObject' in window)
    if (isIE) {
      const blob = new Blob([data.data], {
        type: `application/${type};charset=utf-8;`
      })
      window.navigator.msSaveOrOpenBlob(blob, name + `.${type}`)
    } else {
      const url = window.URL.createObjectURL(new Blob([data.data], { 'type': `application/${type}` }))
      const link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', name + `.${type}`)
      document.body.appendChild(link)
      link.click()
      URL.revokeObjectURL(link.href)
      document.body.removeChild(link)
    }
  },
  // 下载文件流
  download(data, name = '导出文件', type = 'xlsx') {
    if (!data) {
      return
    }
    const blobData = getBlob(data)
    const isIE = (!!window.ActiveXObject || 'ActiveXObject' in window)
    if (isIE) {
      const blob = new Blob(blobData, {
        type: `application/${type};charset=utf-8;`
      })
      window.navigator.msSaveOrOpenBlob(blob, name + `.${type}`)
    } else {
      const url = window.URL.createObjectURL(new Blob(blobData, { 'type': `${type}` }))
      console.log(url)
      const link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', name + `.${type}`)
      document.body.appendChild(link)
      link.click()
      URL.revokeObjectURL(link.href)
      document.body.removeChild(link)
    }
    function getBlob(base64) {
      return b64toByte(base64)
    }
    // 正常base64要掉一下当前方法 此处base64没有文件前缀 所以不用调该方法
    // function getData (base64) {
    //   return base64.substr(base64.indexOf('base64,') + 7, base64.length)
    // }
    function b64toByte(b64Data, sliceSize) {
      sliceSize = sliceSize || 512
      const byteCharacters = window.atob(b64Data)
      const byteArrays = []
      for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        const slice = byteCharacters.slice(offset, offset + sliceSize)
        const byteNumbers = new Array(slice.length)
        for (let i = 0; i < slice.length; i++) {
          byteNumbers[i] = slice.charCodeAt(i)
        }
        const byteArray = new Uint8Array(byteNumbers)
        byteArrays.push(byteArray)
      }
      return byteArrays
    }
  },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值