亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決前端接收 type:"application/octet-stream" 格式的數(shù)據(jù)并下載(解決后端返回不唯一問題)

 更新時間:2023年12月21日 11:52:22   作者:飛奔的馬鈴貓  
前端接收 type: “application/octet-stream“ 格式的數(shù)據(jù)并下載,還有后端既返回octet-stream還返回JSON數(shù)據(jù)時的處理方法,今天給大家分享前端接收 type:"application/octet-stream" 格式的數(shù)據(jù)并下載(解決后端返回不唯一問題)的解決方案,感興趣的朋友一起看看吧

前端接收 type: “application/octet-stream“ 格式的數(shù)據(jù)并下載,還有后端既返回octet-stream還返回JSON數(shù)據(jù)時的處理方法

今天些項目的時候,后端改了一下文件下載的方式,打算用接口返回 type: “application/octet-stream“格式的數(shù)據(jù),然后前端來處理下載。今天也是第一次用這種方法,查詢了網(wǎng)上的內(nèi)容總結了一下。

第一步

響應攔截器中作出初步的判斷

這里判斷if是針對這種情況時做出的應對方法,可能還有其他情況,這里只是最簡單的。

service.interceptors.response.use(
 response => {
   // 導出
   const headers = response.headers
   if (headers['content-type'] === 'application/octet-stream;charset=utf-8') {
     return response.data
   }
   ...//這里時其他的情況
 },
 error => {
   return Promise.reject(error)
 }
)

第二步

對api進行修改

這是我的axios的寫法,按各自的走就行

第三步

發(fā)起請求,對請求到的數(shù)據(jù)進行處理下載

   exportClick () {
         export().then(res => {
           const content = res
           const blob = new Blob([content])
           const fileName = '導出信息.xlsx'
           if ('download' in document.createElement('a')) { // 非IE下載
             const elink = document.createElement('a')//創(chuàng)建一個a標簽通過a標簽的點擊事件區(qū)下載文件
             elink.download = fileName
             elink.style.display = 'none'
             elink.href = URL.createObjectURL(blob)//使用blob創(chuàng)建一個指向類型數(shù)組的URL
             document.body.appendChild(elink)
             elink.click()
             URL.revokeObjectURL(elink.href) // 釋放URL 對象
             document.body.removeChild(elink)
           } else { // IE10+下載
             navigator.msSaveBlob(blob, fileName)
           }
         })
       }

本來是已經(jīng)寫完這個功能了,但后臺告訴我有可能沒有文件,然后他要給我返回json數(shù)據(jù)格式

我又懵了一會,又查了半天資料,終于是完善好了

當返回的數(shù)據(jù)類型既有可能是JSON又可能是octet-stream時

第一步

首先我們不能改變原來的代碼

這一行對于接收文件是必須的,但是這樣又會讓我們的數(shù)據(jù)變成blob類型

上面是有文件時的樣子

這是沒有文件的樣子

可以注意到 blob有 type這個數(shù)據(jù),我們就可以根據(jù)這個type來判斷進行下一步處理

if (res.type == "application/json") {
    ...
}
if (res.type == "application/octet-stream"){
    ...
}      

其中是octet-stream類型時的操作我們上面就已經(jīng)寫道了
下面介紹如何轉換為json

第二步:將blob轉換為json數(shù)據(jù)

這里要先用FilerReader,不可以直接使用JSON.parse

         if (res.type == "application/json") {
           // console.log("type == json");
           const reader = new FileReader(); //通過fileReader將blob類型的數(shù)據(jù)轉換成json格式的數(shù)據(jù)
           reader.readAsText(res, "utf-8");
           reader.onload = function () {
             //讀取完成后返回字符串形式的內(nèi)容
             // console.log("reader.result", reader.result);
             const msg = JSON.parse(reader.result);
             console.log("JSON轉換結果", msg);
			  //...這里時對轉換后結果的操作
             }
           };
         }

到這里下載文件的種種問題就解決啦,寫個博客紀念一下,第一次處理這種問題

轉載說明:

借鑒原作者:https://blog.csdn.net/u010598111/article/details/85052865

到此這篇關于前端接收 type: “application/octet-stream“ 格式的數(shù)據(jù)并下載,解決后端返回不唯一的文章就介紹到這了,更多相關接收application/octet-stream格式的數(shù)據(jù)并下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • php去掉json反斜杠的實例講解

    php去掉json反斜杠的實例講解

    在本篇文章里小編給大家整理了一篇關于php去掉json反斜杠的實例講解,有興趣的朋友們可以參考學習下。
    2021-10-10
  • javascript 實現(xiàn)簡單的table排序及table操作練習

    javascript 實現(xiàn)簡單的table排序及table操作練習

    在這個列子中,練習了table的操作,主要有:tBodies、rows、cells,還有有關數(shù)組的排序方法:sort,按興趣的朋友可以研究下
    2012-12-12
  • javascript打印大全(打印頁面設置/打印預覽代碼)

    javascript打印大全(打印頁面設置/打印預覽代碼)

    打印頁面設置,打印頁面預覽在打印過程中經(jīng)常會遇到,網(wǎng)上搜集整理了一些實用的打印方法與大家分享,感興趣的朋友可以了解下哈
    2013-03-03
  • 基于three.js實現(xiàn)的3D粒子動效實例代碼

    基于three.js實現(xiàn)的3D粒子動效實例代碼

    這篇文章主要給大家介紹了關于如何基于three.js實現(xiàn)的3D粒子動效的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用three.js具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 詳解JavaScript中的執(zhí)行上下文

    詳解JavaScript中的執(zhí)行上下文

    執(zhí)行上下文是JavaScript中非常重要的概念,它決定了代碼的執(zhí)行順序和作用域鏈等重要信息,下面我們就來深入探討JavaScript執(zhí)行上下文的概念和工作原理吧
    2023-07-07
  • js刪除Array數(shù)組中指定元素的兩種方法

    js刪除Array數(shù)組中指定元素的兩種方法

    下面小編就為大家?guī)硪黄猨s刪除Array數(shù)組中指定元素的兩種方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • JS無限極樹形菜單,json格式、數(shù)組格式通用示例

    JS無限極樹形菜單,json格式、數(shù)組格式通用示例

    本文為大家介紹下JS無級樹形菜單的實現(xiàn),修改了一下數(shù)據(jù)格式,是json和數(shù)組或者混合型的數(shù)據(jù)都通用,不用特定key等,想學習的朋友可以參考下
    2013-07-07
  • 通用的javascript 換行色換列色的小js

    通用的javascript 換行色換列色的小js

    通用的javascript 換行色換列色的小js...
    2007-04-04
  • js怎么只刷新當前頁面一次

    js怎么只刷新當前頁面一次

    Javascript刷新頁面的幾種方法:location.reload()、location.replace(location)、history.go(0)、location=location、location.assign(location)、document.execCommand('Refresh')、window.navigate(location)、document.URL=location.href,js怎么只刷新當前頁面一次呢
    2023-09-09
  • Next.js路由組使用之組織路由結構示例詳解

    Next.js路由組使用之組織路由結構示例詳解

    這篇文章主要為大家介紹了Next.js路由組使用之組織路由結構示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論