vue中axios(async/await)实现二进制流文件下载

需求:通过后端接口下载excel/docx文件(反正各种文件),后端没有文件地址,返回二进制流文件

一、接口地址

// 文件下载
export function downloadFlie (fileId, fileName) {
  return request({
    url:  '/v1/downLoad/' + fileId + '/' + fileName,
    method: 'GET',
    responseType: 'arraybuffer', //blob
    headers: {
      'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    }
  })
}

注意:
responseType 必须为arraybuffer或者blob

请求头 Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

二、使用

1、不修改文件名

async download(){
  let blob = new Blob([await downloadFlie(this.fileId, this. fileName)], { type: "application/[vnd.ms-excel;charset=utf-8](vnd.ms-excel;charset=utf-8)" });
 // 通过 URL.createObjectURL(Blob对象), 可以把 Blob对象 转换成一个链接地址,该地址可以直接用在某些 DOM 的 src 或者 href 上
  let objectUrl = URL.createObjectURL(blob);   //
  window.location.href = objectUrl;   //
 }

2、修改文件名

async download(){
   let fileName = '哈哈哈.docx'
   let blob = new Blob([await downloadFlie(this.fileId, fileName)], { type: "application/[vnd.ms-excel;charset=utf-8](vnd.ms-excel;charset=utf-8)" });
   // 通过 URL.createObjectURL(Blob对象), 可以把 Blob对象 转换成一个链接地址,该地址可以直接用在某些 DOM 的 src 或者 href 上
   const link = document.createElement('a'); //创建a标签
   link.href = window.URL.createObjectURL(blob);  //创建下载的链接
   link.download = fileName; //文件名
   link.click(); //点击下载
   window.URL.revokeObjectURL(link.href); 
//window.URL.revokeObjectUR()下载链接)释放blob对象
   link.remove(); //将a标签移除
 }

2021.2.5更新

  async download(){
     let blob = new Blob([await downloadFlie()])
     let excelName = '名称'
    /* 兼容ie内核,360浏览器的兼容模式 */
      if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        window.navigator.msSaveOrOpenBlob(blob, `${excelName}.xls`)
      } else {
      /* 火狐谷歌的文件下载方式 */
        var downloadElement = document.createElement('a')
        var href = window.URL.createObjectURL(blob)
        downloadElement.href = href
        downloadElement.download = `${excelName}.xls`
        document.body.appendChild(downloadElement)
        downloadElement.click()
        document.body.removeChild(downloadElement)
        window.URL.revokeObjectURL(href)
      }
}
 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容