后台返回blob數據轉JSON時遇到的問題


有一個業務場景:批量導入數據時,導入excel,如果成功,后台返回成功的json數據。如果批量導入失敗,后端會返回excel文件流告知是哪幾條數據出錯。

也許你會遇到這樣的問題:

(1)如果不在請求中設置responseType: 'blob' 文件流可以正常下載,但是打開excel時會報錯。我們下載的文件是有問題的。

所以我們必須在請求中設置responseType: 'blob' 。

(2)這時候就來了另外一個問題。加了responseType: 'blob' 之后,原本正確場景返回的json數據被改成了blob數據了。所以我們要針對返回的數據做不同的處理。正確時我們需要將blob數據轉為json數據(type值為:application/json,以此作為判斷條件)

// 如果返回的是json格式,將blob數據轉為json數據。
if (res.data.type === 'application/json') {
    let reader = new FileReader()
    reader.readAsText(res.data, 'utf-8')
    reader.onload = (e) => {
       // JSON.parse(reader.result) 轉譯后的json數據
       res.data = JSON.parse(reader.result)
       // 處理相關邏輯...
    }
} else {
   // 文件流,下載文件邏輯...
}    

這個地方稍有不注意就會遇到 Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'. 其實就是太粗心的問題哦~

reader.readAsText(res.data, 'utf-8')  // res.data 取值取錯就會報以上的問題,所以一點過要認真吶~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM