js下载excel 文件函数封装

该文章讲述了如何使用JavaScript处理Blob数据,通过FileReader读取并转换为文本,然后尝试将文本解析为JSON。在成功解析的情况下,根据响应码决定是否展示错误信息;否则,创建一个新的Blob对象用于文件下载,支持非IE和IE浏览器的下载方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const doDownload = ({
  url,
  params,
  data,
  method = 'GET',
  type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8',
  fileName,
}: paramsType) => {
  return request({
    url,
    method,
    data,
    params,
    responseType: 'blob',
    customConfig: { originRespone: true },
  }).then((res) => {
    
    const blob = res.data
    // 通过reader 将blob转化成字符串
    const reader = new FileReader()
    reader.readAsText(blob, 'utf8')

    reader.onload = function () {
      try {
        // 将字符串转成json(正常文件内容无法JSON.parse,会走catch的逻辑)
        const res = JSON.parse(this.result)
        if (res.code !== 200) {
          ElMessage.error(res.message)
        }
      } catch (error) {
        // 正确的情况下载文件
        const blob = new Blob([res.data as any], { type })
        const elink = document.createElement('a')
        if ('download' in elink) {
          // 非IE下载
          const fileName = fileNameFromHeader(res)
          if (fileName) {
            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)
        } else {
          // @ts-ignore
          navigator.msSaveBlob(blob, fileName)
        }
      }
    }
  })
}

参考内容

js 解析blob数据_A_big_fish的博客-优快云博客_js解析blob

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值