1. 程式人生 > >js下載檔案,並捕獲異常的記錄

js下載檔案,並捕獲異常的記錄

在伺服器返回ResponseEntity<byte[]>這種二進位制流的情況下,對於異常的捕獲封裝返回的卻仍然是json,今天折騰了很久

總結如下:

該介面返回值為ResponseEntity<byte[]>,有異常攔截@[email protected],當在下載檔案時出現了異常,則不會返回二進位制流,而返回異常攔截定義的返回值,在此假設為{code:200,messege:"e"},HttpStatus=500。

前端使用fetch請求的程式碼如下:

fetch(url,{options})

//以前沒有先行判斷res.status,後來發現不判斷會很麻煩,因為按照後端習慣來說,全部返回200,然後封裝結果集也是可以完成任務的;後來像今天這種情景讓我知道了果然不按照標準走,解決方案會tm多敲很多字吶。

.then(function(res){

    if(res.status==200){return res;}

    const error=new Error(res.statusText);

    error.response=res;

})

.then(function(res){

    //下載檔案這一套,檔名按照習慣來說是封裝在Content-Disposition中的

    let filename=decodeURI(res.headers.get("Content-Disposition").split("; ")[1].split("=")[1])

    //正常流程res中是blob二進位制流

    return res.blob().then(function(blob){/**這中間是儲存二進位制流的方法,網上很多就不敲了*/})

})

.catch(function(err){

    //這裡我們說過,當http status不為200時,返回的是json

    res.json().then(function(data){/**這裡的data就是json了。按照json的方式處理即可*/})

})

基本上就是這樣,今天這波問題出的我是猝不及防,本來想著在別的ajax上處理異常直接判斷就可以,萬萬沒想到下載這裡出了這種事情,今天卡的主要位置就是res轉json,怎麼轉都拿不到,去查了Promise模型才知道,fetch的request和response提供了arrayBuffer(),blob(),json(),text(),formData(),這些方法都實現了Promise模型(類似java的FunctionInterface),都需要進行callback才能操作資料。就像這樣:res.json().then(function(data){})

相關推薦

js下載檔案捕獲異常記錄

在伺服器返回ResponseEntity<byte[]>這種二進位制流的情況下,對於異常的捕獲封裝返回的卻仍然是json,今天折騰了很久 總結如下: 該介面返回值為ResponseEntity<byte[]>,有異常攔截@[email p

Linux使用Shell指令碼實現FTP自動下載檔案記錄下載檔案日誌

Linux使用Shell指令碼實現FTP自動下載檔案,並記錄下載檔案日誌 最近初學shell程式設計,記一下自己寫的第一個指令

利用WGET下載檔案儲存到指定目錄

wget是Linux上一個非常不錯的下載指令,而其指令的內容雖然說是非常簡單,但內藏許多的引數,也算是Linux工作者常用的指令之一。 而這個指令我想在各大系統都預設有提供,包括了Ubuntu、Fedora等,而一般來說,要使用wget下載檔案,只需要打以下的

PHP強制下載檔案輸出檔名與檔案大小資訊

function getFileSize($url){ //獲取檔案大小函式 $url = parse_url($url); if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port']

Ftp上傳下載檔案能自定義進度條展示(FtpClient)

前一段時間,自己寫了一個java專案釋出在一個免費的java平臺上但是該平臺給專案的是虛擬路徑並不能上傳檔案。後來想到應用ftp作為上傳檔案的儲存器。 ftp上傳的工具類有sun(sun.net.*)和apache(org.apache.commons.net.ftp.* 

下載檔案彈出儲存提示框選擇位置絕對路徑 or相對路徑

1.因為Aiax不能返回流 所以用js表單提交發送請求 var form = document.createElement("form");document.body.appendChild(form);var nameInput = document.createEle

使用Android內部的DownloadProvider下載檔案獲取cache許可權 .

Android內部提供了一個DownloadProvider,是一個非常完整的下載工具,提供了很好的外部介面可以被其他應用程式呼叫,來完成下載工作。同時也提供和很好的下載、通知、儲存等機制。 在Android的Browser等工具裡面都用到了這個DownloadProvid

讀懂Android (1):使用Android內部的DownloadProvider下載檔案獲取cache許可權

Android內部提供了一個DownloadProvider,是一個非常完整的下載工具,提供了很好的外部介面可以被其他應用程式呼叫,來完成下載工作。同時也提供和很好的下載、通知、儲存等機制。 在Android的Browser等工具裡面都用到了這個DownloadProvid

js 把字串儲存為txt檔案下載到本地

程式碼如下           exportRaw('text.txt','123123123') function fakeClick(obj) { var ev = document.createEvent("MouseE

網頁JS下載檔案改檔名

1、使用加入多個iframe方法,開啟多個連結function _createIFrame(url, triggerDelay, removeDelay) { setTimeout(() => { let frame = document.cre

HTML實現通過超連結下載檔案還附帶一些js輔助函式

下載檔案函式 download (src, fileName) { let $a = document.createElement('a'); $a.setAttribute('href', src); $a.setAttribute('download', fileName);

關於html頁面展現pdf檔案隱藏列印、下載等按鈕的總結

關於html頁面展現pdf檔案,並隱藏列印、下載等按鈕的總結 由於專案需求,要在頁面預覽pdf檔案而不能提供下愛列印功能,故在網上查詢了一些前輩的經驗,自己也嘗試了一番,現在講經驗總結一下。 pdfobject.js jquery.media.js pdf.js

Linux運維之批量下載指定網站的100個圖片檔案找出大於200KB的檔案

題目為:  有一百個圖片檔案,它們的地址都是 http://down.fengge.com/img/1.png http://down.fengge.com/img/2.png … 一直到 http://down.fengge.com/img/100.png 批量下載這10

Linux從Ftp上下載最新檔案儲存到指定目錄(實現有點2--)

#!/bin/bash #PS4="#:" #set -x ip=a.b.c.d user=*** passwd=*** srcdir=~/Game ftp -n << ! open $ip 21 user $user $passwd prompt binary dir /server/Linux

Vue.js下載檔案及判斷上傳檔案型別獲取上傳檔案大小

目錄 下載檔案 方法一  方法二 方法三 1.程式碼 1.程式碼 1.程式碼 下載檔案 所用的瀏覽器:Google Chrome 方法一 功能:點選匯出按鈕,提交請求,下載excel檔案; 1.跟後端

使用java將資料寫入檔案下載到客戶端

最近做了一個功能,覺得挺有意思,決定記錄下來,以前也見過類似的功能,以為很高階,其實很簡單。 第一步:寫一個建立檔案的工具類 public class CSVUtils{ /** * CSV檔案生成方法 * @param head

Python---對html檔案內容進行搜尋取出特定URL地址字串儲存成列表使用每個url下載圖片儲存到硬碟上使用正則re

Python—對html檔案內容進行搜尋取出特定URL地址字串,儲存成列表,並使用每個url下載圖片,並儲存到硬碟上,正則re 對目標回包內容取出這樣類似的內容: https://xian

匯出List列表中的資料到Excel檔案提供下載

整體思路 客戶在頁面點選“匯出Excel”連結-->>進入Java邏輯處理程式碼-->>複製Excel模版檔案-->>向這個複製過的模版檔案中寫入List資料-->>把資料寫入完成的Excel檔案下載到客戶端 適用場景 資料格

js中evalarguments與異常處理的用法-基礎知識總結------彭記(017)

報錯 字符串 nts 字符 number 拖動 ron cnblogs 數組 eval的使用: <script> /*eval的作用: * 1.將字符串當成js代碼來執行 * 2.可以將json格式的字符串轉換為js對象*/