js 通過流的方式進行下載

背景

項目上需要用到多語言,項目設計語言選擇是通過header傳遞的,如果直接用平時location.href下載并無法實現(xiàn)這個效果采幌,然后在網(wǎng)上查閱了一些資料,可以通過流處理來實現(xiàn)下載宝惰,代碼如下

downloadFile(){
      let timestamp = new Date().getTime(); //時間戳
      let url =XXXXXXXXXXXX;
      let xmlResquest = new XMLHttpRequest();
      xmlResquest.open("GET", url, true);
      xmlResquest.setRequestHeader("Authorization", "bearer" + this.token); //token驗證
      xmlResquest.responseType = "blob";
      xmlResquest.onload = function(oEvent) { //接口響應后的處理
        var content = xmlResquest.response; // 組裝a標簽
        let elink = document.createElement("a");// 設置下載文件名
        elink.download = "track-kml-" + timestamp + ".kml";
        elink.style.display = "none";
        let blob = new Blob([content]);
        elink.href = URL.createObjectURL(blob);
        document.body.appendChild(elink);
        elink.click();
        document.body.removeChild(elink);
        URL.revokeObjectURL(blob); //釋放對象
      };
      xmlResquest.send();
}

本著不懂就學的原則植榕,查閱了部分不懂的方法再沧,以下資料來源MDN

URL.createObjectURL

URL.createObjectURL() 靜態(tài)方法會創(chuàng)建一個 DOMString尼夺,其中包含一個表示參數(shù)中給出的對象的URL。這個 URL 的生命周期和創(chuàng)建它的窗口中的 document 綁定炒瘸。這個新的URL 對象表示指定的 File 對象或 Blob 對象淤堵。

內(nèi)存管理

在每次調(diào)用 createObjectURL() 方法時,都會創(chuàng)建一個新的 URL 對象顷扩,即使你已經(jīng)用相同的對象作為參數(shù)創(chuàng)建過拐邪。當不再需要這些 URL 對象時,每個對象必須通過調(diào)用 URL.revokeObjectURL() 方法來釋放隘截。瀏覽器會在文檔退出的時候自動釋放它們扎阶,但是為了獲得最佳性能和內(nèi)存使用狀況,你應該在安全的時機主動釋放掉它們婶芭。

XMLHttpRequest.responseType

XMLHttpRequest.responseType 屬性是一個枚舉類型的屬性东臀,返回響應數(shù)據(jù)的類型。它允許我們手動的設置返回數(shù)據(jù)的類型犀农。如果我們將它設置為一個空字符串惰赋,它將使用默認的"text"類型。

在工作環(huán)境(Work Environment)中將responseType的值設置為"document"通常會被忽略. 當將responseType設置為一個特定的類型時呵哨,你需要確保服務器所返回的類型和你所設置的返回值類型是兼容的赁濒。那么如果兩者類型不兼容呢?恭喜你轨奄,你會發(fā)現(xiàn)服務器返回的數(shù)據(jù)變成了null,即使服務器返回了數(shù)據(jù)拒炎。還有一個要注意的是挪拟,給一個同步請求設置responseType會拋出一個InvalidAccessError 的異常。

responseType支持以下幾種值:

描述
"" 將 responseType 設為空字符串與設置為"text"相同击你, 是默認類型 (實際上是 DOMString)舞丛。
"arraybuffer" response 是一個包含二進制數(shù)據(jù)的 JavaScript ArrayBuffer 。
"blob" response 是一個包含二進制數(shù)據(jù)的 Blob 對象 果漾。
"document" response 是一個 HTML Document 或 XML XMLDocument 球切,這取決于接收到的數(shù)據(jù)的 MIME 類型。請參閱 HTML in XMLHttpRequest 以了解使用 XHR 獲取 HTML 內(nèi)容的更多信息绒障。
"json" response 是一個 JavaScript 對象吨凑。這個對象是通過將接收到的數(shù)據(jù)類型視為 JSON 解析得到的。
"text" response 是包含在 DOMString 對象中的文本户辱。
"moz-chunked-arraybuffer"

與"arraybuffer"相似鸵钝,但是數(shù)據(jù)會被接收到一個流中。使用此響應類型時庐镐,響應中的值僅在 progress 事件的處理程序中可用恩商,并且只包含上一次響應 progress 事件以后收到的數(shù)據(jù),而不是自請求發(fā)送以來收到的所有數(shù)據(jù)必逆。
在 progress 事件處理時訪問 response 將返回到目前為止收到的數(shù)據(jù)怠堪。在 progress 事件處理程序之外訪問, response 的值會始終為 null 名眉。|
|"ms-stream" |response 是下載流的一部分粟矿;此響應類型僅允許下載請求,并且僅受Internet Explorer支持损拢。|

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陌粹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子福压,更是在濱河造成了極大的恐慌掏秩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荆姆,死亡現(xiàn)場離奇詭異蒙幻,居然都是意外死亡,警方通過查閱死者的電腦和手機胞枕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門杆煞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事决乎《友” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵构诚,是天一觀的道長蚌斩。 經(jīng)常有香客問我,道長范嘱,這世上最難降的妖魔是什么送膳? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮丑蛤,結果婚禮上叠聋,老公的妹妹穿的比我還像新娘。我一直安慰自己受裹,他們只是感情好碌补,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棉饶,像睡著了一般厦章。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上照藻,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天袜啃,我揣著相機與錄音,去河邊找鬼幸缕。 笑死群发,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的冀值。 我是一名探鬼主播也物,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼宫屠,長吁一口氣:“原來是場噩夢啊……” “哼列疗!你這毒婦竟也來了?” 一聲冷哼從身側響起浪蹂,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抵栈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坤次,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體古劲,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年缰猴,在試婚紗的時候發(fā)現(xiàn)自己被綠了产艾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闷堡,靈堂內(nèi)的尸體忽然破棺而出隘膘,到底是詐尸還是另有隱情,我是刑警寧澤杠览,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布弯菊,位于F島的核電站,受9級特大地震影響踱阿,放射性物質發(fā)生泄漏管钳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一软舌、第九天 我趴在偏房一處隱蔽的房頂上張望才漆。 院中可真熱鬧,春花似錦佛点、人聲如沸栽烂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腺办。三九已至,卻和暖如春糟描,著一層夾襖步出監(jiān)牢的瞬間怀喉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工船响, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躬拢,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓见间,卻偏偏與公主長得像聊闯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子米诉,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容