最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue如何實(shí)現(xiàn)將后端返回二進(jìn)制文件在瀏覽器自動(dòng)下載

 更新時(shí)間:2024年11月22日 11:45:28   作者:前端白袍  
Vue項(xiàng)目開發(fā)中,遇到界面下載功能時(shí),前端如何實(shí)現(xiàn)將后端返回二進(jìn)制文件在瀏覽器自動(dòng)下載呢,本文就來(lái)和大家聊聊具體的解決方法吧

一、關(guān)鍵代碼

export function downloadFile(fileName) {
  axios({
    method: 'post',
    url: process.env.VUE_APP_BASE_API + '/cgi-bin/file',
    data: {
      'X-Token': getToken(),
      method: 'download',
      data: {
        filename: fileName
      }
    },
    responseType: 'blob'
  }).then((res) => {
    const blob = new Blob([res.data], { type: 'application/octet-stream;charset=utf-8' }); // 將二進(jìn)制流轉(zhuǎn)為blob
    const a = document.createElement('a');
    const url = window.URL.createObjectURL(blob); // 創(chuàng)建新的url并指向file對(duì)象或blob對(duì)象的地址
    a.href = url;
    a.download = fileName; // 設(shè)置下載文件名
    a.style.display = 'none'; //避免數(shù)據(jù)量過大,下載時(shí)間長(zhǎng),看到a標(biāo)簽
    document.body.appendChild(a);
    a.click();//關(guān)鍵;調(diào)用點(diǎn)擊事件,(模擬a標(biāo)簽的點(diǎn)擊下載效果)
    document.body.removeChild(a); // 下載完成移除元素
    window.URL.revokeObjectURL(url); // 釋放內(nèi)存
  });
}

二、實(shí)現(xiàn)邏輯

首先,整個(gè)下載邏輯執(zhí)行有以下幾步:

1.前端發(fā)起請(qǐng)求拿到后端返回的二進(jìn)制格式的數(shù)據(jù);

2.將請(qǐng)求響應(yīng)體中的二進(jìn)制目標(biāo)數(shù)據(jù)轉(zhuǎn)行為blob類型的數(shù)據(jù);

3.創(chuàng)建一個(gè)a標(biāo)簽,后續(xù)的自動(dòng)下載的關(guān)鍵功能就是利用a.click()實(shí)現(xiàn);

4.利用window.URL.createObjectURL(blob)方法,利用第二步轉(zhuǎn)換的blob數(shù)據(jù)創(chuàng)建出一個(gè)url,并賦值給第三步創(chuàng)建的a標(biāo)簽的href屬性;

5.利用document.body.appendChild(a)將a標(biāo)簽添加到body標(biāo)簽中,后執(zhí)行a.click()實(shí)現(xiàn)文件下載;

6.下載完成后,要移除a標(biāo)簽,使用代碼document.body.removeChild(a)實(shí)現(xiàn);

7.釋放第四步創(chuàng)建的url地址內(nèi)存;

8.整個(gè)下載流程結(jié)束。

三、代碼解讀

如上圖,封裝了下載文件的函數(shù),其中axios網(wǎng)絡(luò)請(qǐng)求的編寫根據(jù)你實(shí)際后端定的接口來(lái)寫,主要目的就是拿到后端返回的二進(jìn)制數(shù)據(jù)。其中fileName,是當(dāng)前請(qǐng)求一個(gè)參數(shù),同時(shí)也作為后續(xù)要用到的文件名。需要注意的是,請(qǐng)求的responseType:"blob"。

二進(jìn)制格式數(shù)據(jù)轉(zhuǎn)行blob數(shù)據(jù)類型的代碼;

 const blob = new Blob([res.data], { type: 'application/octet-stream;charset=utf-8' }); // 將二進(jìn)制流轉(zhuǎn)為blob

創(chuàng)建a標(biāo)簽;創(chuàng)建url地址;給a標(biāo)簽href屬性賦值url地址;執(zhí)行點(diǎn)擊操作;最后移除a標(biāo)簽 釋放url內(nèi)容。

 const a = document.createElement('a');
 const url = window.URL.createObjectURL(blob); // 創(chuàng)建新的url并指向file對(duì)象或blob對(duì)象的地址
 a.href = url;
 a.download = fileName; // 設(shè)置下載文件名
 a.style.display = 'none'; //避免數(shù)據(jù)量過大,下載時(shí)間長(zhǎng),看到a標(biāo)簽
 document.body.appendChild(a);
 a.click(); //關(guān)鍵;調(diào)用點(diǎn)擊事件,(模擬a標(biāo)簽的點(diǎn)擊下載效果)
 document.body.removeChild(a); // 下載完成移除元素
 window.URL.revokeObjectURL(url); // 釋放內(nèi)存

以上就是Vue如何實(shí)現(xiàn)將后端返回二進(jìn)制文件在瀏覽器自動(dòng)下載的詳細(xì)內(nèi)容,更多關(guān)于Vue瀏覽器自動(dòng)下載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入了解vue-loader是如何工作的

    深入了解vue-loader是如何工作的

    這篇文章主要為大家詳細(xì)介紹了vue-loader的工作原理與使用,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • ElementUI+命名視圖實(shí)現(xiàn)復(fù)雜頂部和左側(cè)導(dǎo)航欄

    ElementUI+命名視圖實(shí)現(xiàn)復(fù)雜頂部和左側(cè)導(dǎo)航欄

    本文主要介紹了ElementUI+命名視圖實(shí)現(xiàn)復(fù)雜頂部和左側(cè)導(dǎo)航欄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • nuxt 每個(gè)頁(yè)面head標(biāo)簽內(nèi)容設(shè)置方式

    nuxt 每個(gè)頁(yè)面head標(biāo)簽內(nèi)容設(shè)置方式

    這篇文章主要介紹了nuxt 每個(gè)頁(yè)面head標(biāo)簽內(nèi)容設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-11-11
  • vue 搭建后臺(tái)系統(tǒng)模塊化開發(fā)詳解

    vue 搭建后臺(tái)系統(tǒng)模塊化開發(fā)詳解

    這篇文章主要介紹了vue 搭建后臺(tái)系統(tǒng)模塊化開發(fā)詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-05-05
  • 使用Vue2實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車功能(可直接使用)

    使用Vue2實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車功能(可直接使用)

    這篇文章主要給大家介紹了如何使用Vue2實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車功能,文中有相關(guān)的代碼示例,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-08-08
  • vue devserver及其配置方法

    vue devserver及其配置方法

    這篇文章主要介紹了vue devserver及其配置方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 如何使用Webstorm和Chrome來(lái)調(diào)試Vue項(xiàng)目

    如何使用Webstorm和Chrome來(lái)調(diào)試Vue項(xiàng)目

    這篇文章主要介紹了如何使用Webstorm和Chrome來(lái)調(diào)試Vue項(xiàng)目,對(duì)Vue感興趣的同學(xué),一定要看一下
    2021-05-05
  • 在vue中安裝使用vux的教程詳解

    在vue中安裝使用vux的教程詳解

    這篇文章主要介紹了在vue中安裝使用vux的教程,本文給大家記錄了vuex的安裝使用過程,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-09-09
  • vue - vue.config.js中devServer配置方式

    vue - vue.config.js中devServer配置方式

    今天小編就為大家分享一篇vue - vue.config.js中devServer配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-10-10
  • vue關(guān)于Promise的使用方式

    vue關(guān)于Promise的使用方式

    這篇文章主要介紹了vue關(guān)于Promise的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論

靖边县| 洛南县| 芷江| 永宁县| 临澧县| 米泉市| 竹溪县| 汉沽区| 牡丹江市| 东兴市| 新乡市| 新营市| 晋中市| 上栗县| 敖汉旗| 青神县| 沂源县| 嘉荫县| 肃南| 襄樊市| 平阳县| 昭苏县| 收藏| 科尔| 揭阳市| 将乐县| 金华市| 香格里拉县| 句容市| 临沧市| 荆州市| 沛县| 绥棱县| 老河口市| 拉孜县| 龙山县| 综艺| 汝城县| 万安县| 常德市| 炉霍县|