vue中axios(async/await)實(shí)現(xiàn)二進(jìn)制流文件下載

需求:通過后端接口下載excel/docx文件(反正各種文件),后端沒有文件地址,返回二進(jìn)制流文件

一、接口地址

// 文件下載
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

請(qǐng)求頭 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對(duì)象), 可以把 Blob對(duì)象 轉(zhuǎn)換成一個(gè)鏈接地址,該地址可以直接用在某些 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對(duì)象), 可以把 Blob對(duì)象 轉(zhuǎn)換成一個(gè)鏈接地址,該地址可以直接用在某些 DOM 的 src 或者 href 上
   const link = document.createElement('a'); //創(chuàng)建a標(biāo)簽
   link.href = window.URL.createObjectURL(blob);  //創(chuàng)建下載的鏈接
   link.download = fileName; //文件名
   link.click(); //點(diǎn)擊下載
   window.URL.revokeObjectURL(link.href); 
//window.URL.revokeObjectUR()下載鏈接)釋放blob對(duì)象
   link.remove(); //將a標(biāo)簽移除
 }

2021.2.5更新

  async download(){
     let blob = new Blob([await downloadFlie()])
     let excelName = '名稱'
    /* 兼容ie內(nèi)核,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)
      }
}
 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容