JavaScript-如何在JSON中接收字节数组

我试图从服务器接收一个将包装在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事件触发时下载文件。


分享到:


相關文章: