【发布时间】:2019-06-19 20:22:08
【问题描述】:
我有一个返回 base64 PDF 的 POST 调用。当我调用此端点时,我将其转换为 Blob,然后下载它。这适用于除 Safari 之外的所有浏览器。
openPdf = () => {
const sendObj = {
fakeValue: 'test'
};
axios.post('https://fakeendpoint.com/create-pdf', sendObj)
.then((res) => {
const base64URL = res.data;
const binary = atob(base64URL.replace(/\s/g, ''));
const len = binary.length;
const buffer = new ArrayBuffer(len);
const view = new Uint8Array(buffer);
for (let i = 0; i < len; i += 1) {
view[i] = binary.charCodeAt(i);
}
// create the blob object with content-type "application/pdf"
const blob = new Blob([view], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
a.href = url;
a.download = 'Test.pdf';
a.target = '_blank';
a.click();
});
}
我怎样才能让它在 Safari 中工作?
【问题讨论】:
-
请添加更多关于 Safari 出现问题的详细信息。您是否在开发者工具控制台中看到任何错误?
-
控制台中没有错误,在网络选项卡中我可以看到 POST 正在返回正确的数据。 PDF 永远不会下载。
-
它在新标签页中打开。未在设备上下载。
标签: javascript pdf safari