欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

二、實現(xiàn)邏輯

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

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

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

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

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

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

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

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

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

三、代碼解讀

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

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

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

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

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

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

相關(guān)文章

  • vue3中defineEmits與defineProps的用法實例

    vue3中defineEmits與defineProps的用法實例

    這篇文章主要介紹了vue3中defineEmits/defineProps的用法實例,需要的朋友可以參考下
    2023-12-12
  • 在Vue3中使用BabylonJs開發(fā)?3D的初體驗

    在Vue3中使用BabylonJs開發(fā)?3D的初體驗

    這篇文章主要介紹了在?Vue3?中使用?BabylonJs?開發(fā)?3D?是什么體驗,在本文中,向您展示了如何創(chuàng)建?Vue?組件、Babylon?類、在畫布上渲染場景以及創(chuàng)建?3D?網(wǎng)格,需要的朋友可以參考下
    2022-07-07
  • vue使用transition組件動畫效果的實例代碼

    vue使用transition組件動畫效果的實例代碼

    這篇文章主要介紹了vue使用transition組件動畫效果的實例代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 一篇文章告訴你如何編寫Vue插件

    一篇文章告訴你如何編寫Vue插件

    這篇文章主要為大家介紹了如何編寫Vue插件,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • vue.js+element-ui的基礎(chǔ)表單實例代碼

    vue.js+element-ui的基礎(chǔ)表單實例代碼

    這篇文章主要介紹了vue.js+element-ui的基礎(chǔ)表單實例代碼,技術(shù)棧即html+vue.js+element-ui,而使用它們的方法也很簡單,引入對應(yīng)的js和css文件即可,需要的朋友可以參考下
    2024-03-03
  • 報錯[vuex] unknown action type: userLogin問題及解決

    報錯[vuex] unknown action type: userLogin問

    這篇文章主要介紹了報錯[vuex] unknown action type: userLogin問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 使用vue-element-admin框架從后端動態(tài)獲取菜單功能的實現(xiàn)

    使用vue-element-admin框架從后端動態(tài)獲取菜單功能的實現(xiàn)

    ​ vue-element-admin是一個純前端的框架,左側(cè)菜單是根據(jù)路由生成的。實際開發(fā)中經(jīng)常需要根據(jù)當(dāng)前登陸人員的信息從后端獲取菜單進行展示,本文將詳細介紹如何實現(xiàn)該功能
    2021-04-04
  • 前端vue+express實現(xiàn)文件的上傳下載示例

    前端vue+express實現(xiàn)文件的上傳下載示例

    本文主要介紹了前端vue+express實現(xiàn)文件的上傳下載示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳解Vue中$props、$attrs和$listeners的使用方法

    詳解Vue中$props、$attrs和$listeners的使用方法

    本文主要介紹了Vue中$props、$attrs和$listeners的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Vue中的計算屬性介紹

    Vue中的計算屬性介紹

    這篇文章主要介紹了Vue中的計算屬性,模板內(nèi)的表達式,用于簡單運算,但是模板中放入太多的邏輯會讓模板過重且難以維護,更多具體內(nèi)容一起進入下面文章學(xué)習(xí)吧,需要的朋友也可以參考一下
    2021-12-12

最新評論