javascript - 将作为unit8array接收到的数据流作为pdf保存到前端的文件系统中

标签 javascript pdf electron data-uri

const reader = response.body.getReader();
        reader.read()
            .then(({ done, value }) => {
                var link = document.createElement("a");
                value = window.btoa(value) //<-tried with and without
                link.download = "test.pdf";
                link.href = 'data:application/pdf;base64,'+value
                link.click();
                // console.log(window.atob(value))
            })

这只是保存一个 pdf 文件,其中没有任何内容/不可读。

回调中的值是读取到数据流中的pdf文件的unicode,因此它只是unit8array中的一堆数字。我尝试将其转换为 base64 并通过数据 uri 下载它,但没有任何运气。

顺便说一句,这是在 Electron 应用程序中

编辑:

当我从后端接收数据时,请求将其显示为 unicode,但响应将其作为可读流提供给我。我 100% 确定我能够解析 unicode 并从中保存 PDF 文件,但我不知道如何从给定的可读流中获取 unicode 形式。

最佳答案

尝试为文件命名:

link.name = "file.pdf";

然后使用base64来制作数据URI。如果这不起作用,请尝试将数据 URI 设置为如下所示:

'data:application/octet-stream;charset=utf-16le;base64,' + value;

如果可能的话,调试 dataURI 可能是值得的,您获得的数据可能会从一开始就被损坏,这会让您陷入困境。

您还可以尝试将 Uint8Array 转换为 File 对象:

var arr = [];
var arr.push(value);
var pdf = new File(arr, 'test.pdf', {type: 'application/pdf'});

然后将其附加到 FormData 对象并将其发布到您的服务器。编辑* 哎呀没有看到你用 Electron 来做这件事,所以我不确定上述内容是否适用,但它可能仍然有帮助。祝你好运!

关于javascript - 将作为unit8array接收到的数据流作为pdf保存到前端的文件系统中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285724/

相关文章:

php - 使用 PHP ImageMagick 库将 pdf 文件的前 n 页转换为单个 png 图像文件

php - 如何使用带有PHP邮件功能的TCPDF

javascript - Jasmine 并导入自定义 Node 模块

javascript - Electron 应用程序无法启动

javascript - 在 Vis.js 中访问节点标签参数值

javascript - 在 "space"热键上切换节点,但不在 "mouseclick"上切换节点

javascript - Bootstrap-slider.js 不会以编程方式触发 setValue 更改功能

java - Selenium 加载完整的网站

php - Tcpdf - 启用滚动

javascript - 带有 Windows 凭据的 GET 和 POST 请求(Node.js、Electron)