如何在iOS上从网站下载base64 pdf文件

问题描述 投票:0回答:1

我正在解决这个问题,我可以在 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();
javascript pdf download
1个回答
0
投票

所以在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();
© www.soinside.com 2019 - 2024. All rights reserved.