Live2d Test Env

接收文件流并导出至excel以及对二进制文件流内容的校验

废话不说 上代码

const handleRightDownload = async () => {
  axios({
    method: 'post',
    url: '/my/handleAndDownloadExcel', // 请求地址 这里写后端的地址,注意加上`/api`以确保最终的请求能被替换掉 ,/api表示server要替换的前缀 '/api' ->  ''
    data: {
       fileid:my.id  //额外参数
    },  
    headers: {
      // 请求头
      Authorization: `Bearer ${token}`,   // 这里要加上token防止401无权限
      'Content-Type': 'application/json;charset=utf-8'
    },
    responseType: 'blob' // 表明返回服务器返回的数据类型,关键代码,不加则会返回json格式
  }).then(async (res) => {
    console.log('res :>> ', res)
    console.log(' res.data :>> ', res.data)
    const blob = new Blob([res.data], {
      type: res.headers['content-type']
    })
    const reader = new FileReader()
//此if语句为了判断返回的二进制对象是不是正常的文件流形式, 如果后端返回的是{code:-1,msg:`模板错误` }诸如此类则会在这里被捕获到,也就没必要走下去了
    if (blob.type.indexOf('application/json') > -1) {
      reader.readAsText(blob)
      reader.onload = (e) => {
        let text = e.target.result
        if (typeof text == 'string') {
          var errInfo = JSON.parse(text)
          MessagePlugin.error({
            content: errInfo.msg,
            duration: 2000
          })
        }
      }
      return
    }
// 正常态,则开始本地下载流程
    const newBlob = res.data
    reader.readAsDataURL(newBlob) // 转换为base64,可以直接放入a标签href
    reader.onload = function (e) {
      var a = document.createElement('a') // 转换完成,创建一个a标签用于下载
      a.download = `${currentFileName.value}.xlsx`
      a.href = e.target.result
      document.body.appendChild(a)
      a.click()
      a.remove()
    }
    MessagePlugin.success(`文件:${currentFileName.value}.xlsx导出成功`)
  })

  //
}
posted @ 2024-03-30 08:43  致爱丽丝  阅读(26)  评论(0编辑  收藏  举报