Vue中axios實(shí)現(xiàn)二進(jìn)制流文件下載(保留異常拋出)

下面需注意,ie保存blob對(duì)象與chrome firefox是有所不同的,需做一個(gè)判斷。

import axios from 'axios'
import {Message} from 'element-ui'
// 文件下載,默認(rèn)post請(qǐng)求.
export function downLoadFile (url, params = {}, fileName = '文件下載', callBack) {
  axios.post(`${url}/`, params, {responseType: 'arraybuffer'}).then(res => {
    if (res.headers['error-message']) {
      // 截取響應(yīng)頭error-message拋出異常信息
      const message = decodeURI(res.headers['error-message']) // 解決中文亂碼問題,需后端編碼配合。
      Message.error(message)
      return false
    }
    const blob = new Blob([res.data], {type: ''})
    if (window.navigator.msSaveOrOpenBlob) {
      // 兼容IE10及以上
      navigator.msSaveBlob(blob, fileName)
    } else {
      // chrome/firefox
      let aTag = document.createElement('a')
      document.body.appendChild(aTag) // 如果不append進(jìn)去火狐下載將無反應(yīng).
      aTag.download = fileName
      aTag.href = URL.createObjectURL(blob)
      aTag.click()
      document.body.removeChild(aTag)
      URL.revokeObjectURL(aTag.href) // 釋放blob對(duì)象
      typeof callBack === 'function' ? callBack() : Message.success('下載成功')
    }
  })
}

做這個(gè)之前有個(gè)問題,后端返回?cái)?shù)據(jù)轉(zhuǎn)arraybuffer之后,如果拋出異常,就收不到具體的信息。
之前考慮有兩種方案,一種前端直接寫死,下載出錯(cuò),但是肯定不合理的,這樣抓不到具體的異常信息,第二種與后端約定一個(gè)映射表,前端做映射,這樣也是比較死板的。
后面查閱一些資料決定,先與后端協(xié)商好,將錯(cuò)誤信息放在響應(yīng)頭的一個(gè)字段里,請(qǐng)求來了先判斷響應(yīng)頭,如果這個(gè)字段為null,則沒有異常再往下執(zhí)行拿到下載數(shù)據(jù),如果異常字段有值則直接拋出異常信息并中斷。

最后編輯于
?著作權(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)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,291評(píng)論 2 89
  • 項(xiàng)目目標(biāo): 1)熟練掌握ajax的使用 (*****) 2)熟悉前后端數(shù)據(jù)交互(***) 3)熟悉elementu...
    1462a2c022bc閱讀 516評(píng)論 0 0
  • 不得不說的那些app測(cè)試的痛點(diǎn) 案例:某拼車軟件的iOS版在更新之后,出現(xiàn)了由于定位問題導(dǎo)致不能叫車的驚天Bug。...
    alston123閱讀 2,022評(píng)論 0 1
  • 三月份我辭去了讓我踏入社會(huì)的第一份工作,在那里生活了三年,成長了三年,我仍然是一個(gè)羽翼不豐滿的職場(chǎng)菜鳥。 在安逸的...
    朵先森閱讀 2,258評(píng)論 0 3
  • 昨天晚上,我們四個(gè)投資者第一次單獨(dú)呆在一起,我們也一起商量了關(guān)于后期民宿裝修運(yùn)作的問題。 在我看來,我們這次的溝通...
    小關(guān)_dec3閱讀 219評(píng)論 0 0

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