欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue中使用axios下载java后台返回文件流导出excel文档

程序员文章站 2024-03-20 15:29:40
...

vue中使用axios下载java后台返回文件流导出excel文档

//1.配置请求
epCaseDataList(para,url) {
  return axios({
    url,
    method: 'post',
    data: para,
    responseType: 'blob',
    ContentType: 'application/json'
  })
}


//2.配置方法
function exportBillingExcel (data, res) {
 if (!data) {//如果没有data数据就不进行操作
   return
 }
 // 获取headers中的filename文件名
 let tempName = res.headers['content-disposition'].split(';')[1].split('filename=')[1]
 // iconv-lite解决中文乱码
 let iconv = require('iconv-lite')
 iconv.skipDecodeWarning = true// 忽略警告
 let fileName = iconv.decode(tempName, 'gbk')
 let blob = new Blob([data], { type: 'application/vnd.ms-excel' })//转换成二进制对象
 if ('download' in document.createElement('a')) { // 不是IE浏览器
   let url = window.URL.createObjectURL(blob)//二进制对象转换成url地址
   let link = document.createElement('a')
   link.style.display = 'none'
   link.href = url
   link.setAttribute('download', fileName)
   document.body.appendChild(link)
   link.click()
   document.body.removeChild(link) // 下载完成移除元素
   window.URL.revokeObjectURL(url) // 释放掉blob对象
 } else {
   window.navigator.msSaveBlob(blob, fileName)
 }
}



//3.在vue中使用
 exportExcel () {
     let start = this.startDate//请求参数
    epCaseDataList({ start })//axios请求
     .then(res => {
       exportBillingExcel(res.data, res)//使用配置的方法进行处理即可
     })
   }