我正在解决这个问题,我可以在 chrome 上下载文档,但不能在 iOS 设备上下载
每当我尝试时,都会收到“不允许将顶部框架导航到数据 URL”错误。
有没有办法用JS做到这一点?
补充问题:
将base64编码的pdf发送给客户端然后下载是一个很好的解决方案还是您有其他建议?请记住,有很多文档,因此不可能将每个文档添加到资产中。
我尝试了下面的代码,它适用于桌面设备,但不适用于 iOS。
const a = document.createElement("a");
a.href = "data:application/pdf;base64,BASE_64_PDF";
a.download = "file.pdf";
a.click();
所以在Danny提到Blob之后,我找到了一个代码可以帮助我将b64 pdf转换为Blob(Blob转换)。而且似乎它也适用于 iOS。
const b64toBlob = (b64Data, contentType = "", sliceSize = 512) => {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (
let offset = 0;
offset < byteCharacters.length;
offset += sliceSize
) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, { type: contentType });
return blob;
};
const contentType = "data:application/pdf";
const b64Data = "BASE_64_DOC";
const blob = b64toBlob(b64Data, contentType);
const blobUrl = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = blobUrl;
a.download = "file_name.pdf";
a.click();