vue下載后臺傳過來的流文件(如excel)并設(shè)置下載文件名

這里介紹兩種方法翔冀,使用 Blob對象 和 使用 js-file-download

這兩種方法下載的文件都不會亂碼淹真,但是 不管使用哪種方法为障,發(fā)送請求時(shí)都要設(shè)置 responseType

方法一:使用Blob對象

Blob對象表示一個(gè)不可變齐莲、原始數(shù)據(jù)的類文件對象亿鲜。Blob 表示的不一定是JavaScript原生格式的數(shù)據(jù)允蜈。File接口基于Blob,繼承了blob的功能并將其擴(kuò)展使其支持用戶系統(tǒng)上的文件。

一陷寝、Blob() 構(gòu)造函數(shù)

摘自:Blob() 構(gòu)造函數(shù)

語法

var aBlob = new Blob( array, options );

參數(shù)

  • array 是一個(gè)由ArrayBuffer, ArrayBufferView, Blob, DOMString 等對象構(gòu)成的 Array ,或者其他類似對象的混合體其馏,它將會被放進(jìn) Blob凤跑。DOMStrings會被編碼為UTF-8。

  • options 是可選的叛复,它可能會指定如下兩個(gè)屬性:

    • type仔引,默認(rèn)值為 "",它代表了將會被放入到blob中的數(shù)組內(nèi)容的MIME類型褐奥。也就是設(shè)置文件類型咖耘。
    • endings,默認(rèn)值為"transparent"撬码,用于指定包含行結(jié)束符\n的字符串如何被寫入儿倒。 它是以下兩個(gè)值中的一個(gè): "native",代表行結(jié)束符會被更改為適合宿主操作系統(tǒng)文件系統(tǒng)的換行符呜笑,或者 "transparent"夫否,代表會保持blob中保存的結(jié)束符不變。

?

二叫胁、URL對象

通過創(chuàng)建URL對象指定文件的下載鏈接凰慈。

// 創(chuàng)建新的URL表示指定的File對象或者Blob對象。
let objectURL = window.URL.createObjectURL(blob); 
window.URL.revokeObjectURL(objectURL); // 釋放內(nèi)存

在每次調(diào)用createObjectURL()方法時(shí)驼鹅,都會創(chuàng)建一個(gè)新的 URL 對象微谓,即使你已經(jīng)用相同的對象作為參數(shù)創(chuàng)建過。當(dāng)不再需要這些 URL 對象時(shí)输钩,每個(gè)對象必須通過調(diào)用 URL.revokeObjectURL()方法來釋放豺型。瀏覽器會在文檔退出的時(shí)候自動釋放它們,但是為了獲得最佳性能和內(nèi)存使用狀況买乃,你應(yīng)該在安全的時(shí)機(jī)主動釋放掉它們触创。

?

三、利用a標(biāo)簽自定義文件名

const link = document.createElement('a'); // 生成一個(gè)a標(biāo)簽为牍。
link.href = window.URL.createObjectURL(blob); // href屬性指定下載鏈接
link.download = fileName; // dowload屬性指定文件名
link.click(); // click()事件觸發(fā)下載

download 屬性設(shè)置文件名時(shí)哼绑,可以直接設(shè)置擴(kuò)展名碉咆。如果沒有設(shè)置抖韩,則瀏覽器將自動檢測正確的文件擴(kuò)展名并添加到文件 。

四:主要完整代碼

  • 普通下載

    axios.post(postUrl, params, {responseType: 'arraybuffer'}).then(res => {
        // 創(chuàng)建Blob對象疫铜,設(shè)置文件類型
        let blob = new Blob([res.data], {type: "application/vnd.ms-excel"})
        let objectUrl = URL.createObjectURL(blob) // 創(chuàng)建URL
        location.href = objectUrl;
        URL.revokeObjectURL(objectUrl); // 釋放內(nèi)存
    })
    
  • 自定義下載后的文件名

    // 利用a標(biāo)簽自定義下載文件名
    const link = document.createElement('a')
    
    axios.post(postUrl, params, {responseType: 'arraybuffer'}).then(res => {
        // 創(chuàng)建Blob對象茂浮,設(shè)置文件類型
        let blob = new Blob([res.data], {type: "application/vnd.ms-excel"})
        let objectUrl = URL.createObjectURL(blob) // 創(chuàng)建URL
        link.href = objectUrl
        link.download = 'xxx' // 自定義文件名
        link.click() // 下載文件
        URL.revokeObjectURL(objectUrl); // 釋放內(nèi)存
    })
    

    :下載指定擴(kuò)展名的文件只需要對照MIME 參考手冊設(shè)置type即可。

?

方法二:使用 js-file-download

  • 安裝

    npm install js-file-download --save
    
  • 使用

    import fileDownload from 'js-file-download'
    
    axios.post(postUrl, params, {responseType: 'arraybuffer'}).then(res => {
        fileDownload(res.data, 'xxx.xls')
    })
    

轉(zhuǎn)載:https://segmentfault.com/a/1190000020540788

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市席揽,隨后出現(xiàn)的幾起案子顽馋,更是在濱河造成了極大的恐慌,老刑警劉巖幌羞,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寸谜,死亡現(xiàn)場離奇詭異,居然都是意外死亡属桦,警方通過查閱死者的電腦和手機(jī)熊痴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聂宾,“玉大人果善,你說我怎么就攤上這事∠敌常” “怎么了巾陕?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纪他。 經(jīng)常有香客問我惜论,道長,這世上最難降的妖魔是什么止喷? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任馆类,我火速辦了婚禮,結(jié)果婚禮上弹谁,老公的妹妹穿的比我還像新娘乾巧。我一直安慰自己,他們只是感情好预愤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布沟于。 她就那樣靜靜地躺著,像睡著了一般植康。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上销睁,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音睡毒,去河邊找鬼。 笑死冗栗,一個(gè)胖子當(dāng)著我的面吹牛演顾,可吹牛的內(nèi)容都是我干的供搀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼钠至,長吁一口氣:“原來是場噩夢啊……” “哼葛虐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棉钧,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤屿脐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掰盘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赞季,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年愧捕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片申钩。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡次绘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撒遣,到底是詐尸還是另有隱情邮偎,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布义黎,位于F島的核電站禾进,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏廉涕。R本人自食惡果不足惜泻云,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狐蜕。 院中可真熱鬧宠纯,春花似錦、人聲如沸层释。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贡羔。三九已至蒙秒,卻和暖如春覆获,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓢省。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工弄息, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勤婚,地道東北人馒胆。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓缨称,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祝迂。 傳聞我的和親對象是個(gè)殘疾皇子睦尽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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