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/