我試圖從服務器接收一個將包裝在JSON中的pdf。
如果我只是將pdf的字節數組發送到前端,我可以通過設置responseType來正確讀取它arraybuffer,然後我可以通過以下方式下載pdf:
var blob = new Blob([data], { type: application/pdf});
if ($window.navigator && $window.navigator.msSaveOrOpenBlob) {
$window.navigator.msSaveOrOpenBlob(blob);
} else {
var a = document.createElement("a");
document.body.appendChild(a);
var fileURL = URL.createObjectURL(blob);
a.href = fileURL;
a.download = fileName;
a.click();
}
}
但是當服務器嘗試發送帶有bytearray的JSON時,如果我設置為responseTypeto JSON,那麼我將無法轉換blob。但是,如果我設置responseType為arrayBuffer,我將獲得一個arrayBuffer數組,如何將其轉換為JSON,同時仍然能夠提取pdf:
我收到的JSON格式如下:
{
result: true,
value:,
errorMessage: null
}
如果假設下面的變量代表responseText的結構:
responseText = {
result: true,
value:,
errorMessage: null
}
然後,responseText.value是字節數組。如果字節數組已經被輸入為Uint8Array,那麼這將起作用。(注意:存在其他類型數組,因此請選擇最適合您情況的數組):
var blob = new Blob([response.value], { type: 'application/pdf'});
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob);
} else {
var a = document.createElement("a");
document.body.appendChild(a);
var fileURL = URL.createObjectURL(blob);
a.href = fileURL;
a.download = 'test';//filename
a.click();
}
但是,如果有一個像下面這樣的字節的字符串數組或整數數組: responseText.value = [145, 229, 216, 110, 3]並且它需要轉換為類型化的字節數組,那麼下面的代碼將起作用:
var ba = new Uint8Array(responseText.value);
要麼,
var ba = new Uint8Array([145, 229, 216, 110, 3]);
因此,
var blob = new Blob([ba], { type: 'application/pdf'});
這樣,字節數組可用於創建blob,因此在click事件觸發時下載文件。
閱讀更多 國外遊戲視頻分享 的文章
關鍵字: 接收 JavaScript 字節