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

时间:2017-09-18 18:13:28

标签: 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文件。

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

这是电子申请btw

编辑:

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

1 个答案:

答案 0 :(得分:1)

尝试为文件命名:

$('#m-submit').prop('disabled',true);
var ainput= $('#a').keyup();
var binput= $('#c').val() >= $('#b').val();
if (ainput && binput) {
  $('#m-submit').prop('disabled', this.value == "" ? true : false);
}

<input type='number' name='a' id='a' />
<input type='hidden' value='' name='b' id='b' />
<input type='hidden' value='100' name='c' id='c' />
<button id='m-submit'>Submit</button>

然后使用base64创建数据URI。如果这不起作用,请尝试制作这样的数据URI:

link.name = "file.pdf";

如果可能的话,调试dataURI可能是值得的,你所获得的数据可能会被破坏,这会让你追尾。

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

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

然后将其附加到FormData对象并将其发布到您的服务器。编辑* oops没有看到你用电子做这个,所以我不确定上述是否适用,但它可能仍然有用。祝你好运!