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

前端處理axios請求下載后端返回的文件流代碼實例

 更新時間:2024年07月20日 14:53:53   作者:大力99  
使用axios可以很方便地獲取后端返回的文件流數(shù)據(jù),并在前端直接在瀏覽器下載,這篇文章主要給大家介紹了關于前端處理axios請求下載后端返回的文件流的相關資料,需要的朋友可以參考下

需求:

點擊按鈕下載文件,請求后端接口,后端返回文件流,如果遇到錯誤信息并不能簡單的res.message拿到錯誤提示,而且想要正常下載前端也需要做些處理。

1.請求接口要加上響應類型為blob, responseType: ‘blob’,如:

function logsDownload(params) {
 return axios.get('xxx/xxx/xxx',{
   params,
   responseType: 'blob'
 })
}

2.定義一個下載的方法

function download(fileName ='log', type: 'txt' | 'json, file:Blob) {
   const blob = new Blob([file]);
    // 獲取heads中的filename文件名
    const downloadElement = document.createElement('a');
    // 創(chuàng)建下載的鏈接
    const href = window.URL.createObjectURL(blob);
    downloadElement.href = href;
    // 下載后文件名
    downloadElement.download = `${fileName}.${type}`
    document.body.appendChild(downloadElement);
    // 點擊下載
    downloadElement.click();
    // 下載完成移除元素
    document.body.removeChild(downloadElement);
    // 釋放掉blob對象
    window.URL.revokeObjectURL(href);
}

3.借助FileReader對象實現(xiàn),F(xiàn)ileReader.readAsText(data)開始讀取指定的Blob中的內(nèi)容。

result屬性中將包含一個字符串以表示所讀取的文件內(nèi)容。

讀取操作完成時觸發(fā)FileReader.onload(),在這里通過reader.result拿到讀取的文件內(nèi)容(即后端返回值),然后對其json序列化,即

可拿到后端返回的message,然后進行相應的展示即可。

// 定義一個讀取文件的方法
async function readFileAsText (file:File){
      const fileReader = new FileReader()
      let text
      await new Promise(resolve=>{
         fileReader.onLoad = ()=>{
            text = fileReader.result
            resolve(true)
         }
        fileReader.readAsText(file, 'utf8')
      })
      return text || ''
 }

4.請求成功和失敗的返回結果是不同

請求下載一個文件,請求成功時返回的是一個文件流,type是對應文件類型,例如:text/xml,正常導出文件; 而請求失敗的時候返回的是json ,type為application/json,不會處理錯誤信息,而是直接導出包含錯誤信息的文件。

但是無論成功還是失敗,返回的結果都是blob格式的文件流。

因此可以通過返回的blob數(shù)據(jù)type類型進行區(qū)分,如果type是文件類型,導出文件,如果type是json則把blob數(shù)據(jù)轉為string,處理錯誤信息。

在響應攔截器那里加入以下,需要判斷如果時文件流直接返回的情況

// 響應攔截器
banseInstance.interceptors.response.use(response => {
  ...
  // 文件流直接返回
  if (response .request.responseType === 'blob' ) {
      if (response .data.type === 'application/json') {
        const res = await readFileAsText(response.data)

        ElMessage.error(JSON.parse(res).message || '下載失敗')
        return false;
     } else {
       return response .data;
     }
  }
 ...
}

點擊按鈕下載

  const handleDown = () => {
    const fileName = 'xxxx'
    const file = await logsDownload(params)
    if (file) {
     download(fileName, 'txt', file)
     ElMessage.success('下載成功')
    }
  }

總結 

到此這篇關于前端處理axios請求下載后端返回的文件流的文章就介紹到這了,更多相關axios請求下載后端返回文件流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue腳手架搭建項目的兼容性配置詳解

    vue腳手架搭建項目的兼容性配置詳解

    這篇文章主要介紹了vue腳手架搭建項目的兼容性配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • vue報錯Failed to execute 'appendChild' on 'Node'解決

    vue報錯Failed to execute 'appendChild&apos

    這篇文章主要為大家介紹了vue報錯Failed to execute 'appendChild' on 'Node'解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • vue實現(xiàn)微信分享朋友圈,發(fā)送朋友的示例講解

    vue實現(xiàn)微信分享朋友圈,發(fā)送朋友的示例講解

    下面小編就為大家分享一篇vue實現(xiàn)微信分享朋友圈,發(fā)送朋友的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue實現(xiàn)路由傳參的四種方式

    Vue實現(xiàn)路由傳參的四種方式

    在單頁應用里,路由是連接頁面與數(shù)據(jù)的橋梁,Vue Router 提供了四種方式把「參數(shù)」從地址欄、內(nèi)存甚至編譯期注入到組件,理解它們的差異,才能在面試和線上故障中游刃有余,下面小編為大家詳細介紹一下
    2025-09-09
  • vue實現(xiàn)移動端適方案的完整步驟

    vue實現(xiàn)移動端適方案的完整步驟

    現(xiàn)在的手機五花八門,造就了移動端窗口分辨率繁多的局面,在不同分辨率的屏幕下保持與UI圖一致的效果,就成了讓前端不得不頭疼的問題,下面這篇文章主要給大家介紹了vue實現(xiàn)移動端適方案的相關資料,需要的朋友可以參考下
    2022-10-10
  • Vue.js實現(xiàn)可編輯的表格

    Vue.js實現(xiàn)可編輯的表格

    這篇文章主要為大家詳細介紹了Vue.js實現(xiàn)可編輯的表格,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • vue中如何引入jest單元測試

    vue中如何引入jest單元測試

    這篇文章主要介紹了vue中如何引入jest單元測試問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Vue中video標簽如何實現(xiàn)不靜音自動播放

    Vue中video標簽如何實現(xiàn)不靜音自動播放

    最近在做大屏展示需要在一開始播放引導視頻,產(chǎn)生自動播放需求,下面這篇文章主要給大家介紹了關于Vue中video標簽如何實現(xiàn)不靜音自動播放的相關資料,需要的朋友可以參考下
    2023-01-01
  • vue3之聲明式和編程式導航詳解

    vue3之聲明式和編程式導航詳解

    這篇文章主要介紹了vue3之聲明式和編程式導航,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue?路由判斷方式

    vue?路由判斷方式

    這篇文章主要介紹了vue?路由判斷方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

盈江县| 上林县| 大悟县| 开鲁县| 青神县| 九江县| 天台县| 布拖县| 渝中区| 沁水县| 沂源县| 石狮市| 乌拉特前旗| 五台县| 新晃| 阿瓦提县| 庆城县| 平顶山市| 紫阳县| 罗山县| 会宁县| 溧水县| 澎湖县| 扶绥县| 鹤峰县| 远安县| 霍邱县| 广昌县| 赫章县| 保康县| 邹城市| 中超| 虎林市| 团风县| 漳浦县| 萨嘎县| 临洮县| 巴里| 大庆市| 库尔勒市| 武功县|