文件流形式下載文件

1、需求

下載文件,掉接口后后端返回文件流。使用window.location.href=url不能正確下載文件

2、解決

    let url = `/event/export?start=${params.start}&end=${params.end}${modules}`;
    let xhr = new XMLHttpRequest();
    xhr.open("GET", url, true); // 也可以使用POST方式,根據(jù)接口
    xhr.responseType = "blob"; // 返回類型blob,XMLHttpRequest支持二進(jìn)制流類型
    xhr.onload = function() {
      if (this.status === 200) {
        let blob = this.response; //使用response作為返回,而非responseText
        let reader = new FileReader();
        reader.readAsDataURL(blob); // 轉(zhuǎn)換為base64,可以直接放入a標(biāo)簽href
        reader.onload = function(e) {
          // 轉(zhuǎn)換完成,創(chuàng)建一個(gè)a標(biāo)簽用于下載
          let a = document.createElement("a");
          a.download = "原始數(shù)據(jù).xlsx";
          a.href = e.target.result;
          a.click();
        };
      }
    };
    xhr.send();

原因:ajax無法請(qǐng)求流文件,需要使用XMLHttpRequest 請(qǐng)求
參考:ajax 請(qǐng)求二進(jìn)制流 圖片文件XMLHttpRequest 請(qǐng)求并處理二進(jìn)制流數(shù)據(jù) 之最佳實(shí)踐

3、簡述blob對(duì)象

  • 代表二進(jìn)制類型的對(duì)象,表示不可變的類似文件對(duì)象的原始數(shù)據(jù),通俗點(diǎn)說,就是Blob對(duì)象是二進(jìn)制數(shù)據(jù),但它是類似文件對(duì)象的二進(jìn)制數(shù)據(jù)。
  • blob URL 是blob形式的url,格式blob:http://XXX,可以通過URL.createObjectURL(blob)創(chuàng)建。
  • blob URL只能應(yīng)用內(nèi)部使用,不能像data URL一樣在瀏覽器上隨意使用。
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識(shí),涉及內(nèi)容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker閱讀 13,990評(píng)論 2 18
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,797評(píng)論 1 45
  • 人人皆有摩尼珠,但求上下遍荒蕪。 一日塵盡照十方,此身無我亦無心。
    十年一井閱讀 223評(píng)論 0 0
  • 1.HDFS簡介 正如其名,HDFS(Hadoop Distribution File System)是一個(gè)分布式...
    Michaelhbjian閱讀 2,572評(píng)論 0 2
  • 夜空綴著點(diǎn)點(diǎn)星辰,一彎月牙兒正從蟬翼般透明的云層里鉆出來,拋灑著銀色的清輝。似水月光斜斜地射入一扇窗戶,朦朧...
    koppppu閱讀 176評(píng)論 0 0

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