IE下載文件前端重命名

兼容性要求不高的情況下可以用a標(biāo)簽的download屬性,HTML5新增的

export function open (url, name) {
  let a = document.createElement('a')
  a.target = '_blank'
  a.setAttribute('href', url)
  if (name) {
    a.setAttribute('download', name)
  }
  a.style.display = 'none'
  document.body.appendChild(a)
  let e = document.createEvent('MouseEvents')
  e.initEvent('click', true, true)
  a.dispatchEvent(e)
  setTimeout(() => {
    document.body.removeChild(a)
  }, 1000)
}

以下情況可以支持


download屬性支持情況

可以看到,萬惡的IE不支持,所以下載下來就是后端指定的名稱或者默認(rèn)名稱

前端重命名文件名還有另一種方法:Blob

async download (url, name) {
  if (window.navigator.msSaveBlob) { // msSaveBlob僅支持IE10+
    const res = await api().get(url) // 獲取到文件的二進(jìn)制流
    const blob = new Blob([res], { type: 'application/json;charset=utf-8' }) // application/vnd.openxmlformats-officedocument.wordprocessingml.document這里表示doc類型
    const href = window.URL.createObjectURL(blob) // 創(chuàng)建下載的鏈接
    try {
      window.navigator.msSaveBlob(blob, name)
    } catch (e) {
      console.log(e)
    }
    window.URL.revokeObjectURL(href)
  } else {
    open(url, name) // 上面那個open函數(shù)
  }
}

但是這種方法有一些弊端:

  • 消耗內(nèi)存,下載大文件可能會崩
  • 點擊下載之后,IE瀏覽器會先把文件下載到電腦(此時瀏覽器看起來沒有任何反應(yīng)),等下載完成再提示:是否保存文件;所以需要你手動在點擊下載的時候加個toast提示之類的

所以我覺得最好的辦法就是在后端返回文件名,既保證兼容性,又不占內(nèi)存

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 面試題一:https://github.com/jimuyouyou/node-interview-questio...
    R_X閱讀 1,778評論 0 5
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化,入門級到專家級,廣度和深度都會有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,694評論 0 7
  • 前端開發(fā)知識點 HTML&CSS對Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:布局、盒子模型...
    Hebborn_hb閱讀 899評論 0 1
  • 這應(yīng)該是你見過的最全前端下載總結(jié) 自己整理的一些項目中遇到過的關(guān)于上傳和下載的一些Demo,大前端系列(也就是純前...
    周小肆閱讀 1,749評論 1 12
  • @轉(zhuǎn)自GitHub 介紹js的基本數(shù)據(jù)類型。Undefined、Null、Boolean、Number、Strin...
    YT_Zou閱讀 1,330評論 0 0

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