【发布时间】:2019-06-22 02:35:02
【问题描述】:
我正在尝试从服务器接收 PDF,该 PDF 将包装在 JSON 中。
如果我只是将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();
}
}
但是,当服务器尝试发送带有字节数组的 JSON 时,如果我将 responseType 设置为 JSON,那么我将无法转换 blob。但是,如果我将responseType 设置为arrayBuffer,我将得到一个arrayBuffer 数组,如何将其转换为JSON,同时仍然能够提取PDF:
我收到的 JSON 格式为:
{
result: true,
value: <the pdf byte array>,
errorMessage: null
}
【问题讨论】:
-
JSON 不是为二进制内容设计的。您必须使用字符串格式,因此您必须将二进制文件编码为字符串格式,然后将其解码以使其恢复为二进制文件。我强烈建议您使用 Petr Averyanov 回答的 base64
标签: javascript angularjs json arraybuffer