下载文件

/**
 * 下载文件
 * @param content 响应体
 * @param fileName 文件名
 */
export function download(content, fileName) {
  const blob = new Blob([content]) //创建一个类文件对象:Blob对象表示一个不可变的、原始数据的类文件对象
  const url = window.URL.createObjectURL(blob) //URL.createObjectURL(object)表示生成一个File对象或Blob对象
  let dom = document.createElement('a') //设置一个隐藏的a标签,href为输出流,设置download
  dom.style.display = 'none'
  dom.href = url
  dom.setAttribute('download', fileName) //指示浏览器下载url,而不是导航到它;因此将提示用户将其保存为本地文件
  document.body.appendChild(dom)
  dom.click()
}
 
 
 
exportTaskTestReportFun() {
      this.exportTaskTestReport({  //接口 
        projectId: this.projectId,
        taskId: this.currentNodeData.id,
        taskExcId: this.currentRecord,
      })
        .then(resp => {
          const contentDisposition = resp.headers['content-disposition']
          let fileName = 'unknown'
          if (contentDisposition) {
            fileName = window
              .decodeURI(resp.headers['content-disposition'])
              .split('=')[1]
          }
          this.$message.success('导出成功')
          download(resp.data, fileName)
        })
        .catch(err => {
          console.error(err)
        })
    },
 
 
 
exportTaskTestReport(_, {projectId, taskId, taskExcId}) {          //记得这里是用get,而不是$get,$get封装过了,会直接去response的data,但是往往下载需要拿到他的文件名,在resp.headers中
    return this.$axios.get(
      `${BASE}/projects/${projectId}/reports/tasks/${taskId}/${taskExcId}/export-html`,
      {
        responseType: 'arraybuffer',
      },
    )
  },
原文地址:https://www.cnblogs.com/MJmajong/p/13597326.html