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表单。
答案 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没有看到你用电子做这个,所以我不确定上述是否适用,但它可能仍然有用。祝你好运!