【发布时间】:2016-03-29 21:58:06
【问题描述】:
我有一个 Web 服务,它在响应中返回 PDF 文件内容。当用户单击链接时,我想将其下载为 pdf 文件。我在 UI 中编写的 javascript 代码如下:
$http.get('http://MyPdfFileAPIstreamURl').then(function(response){
var blob=new File([response],'myBill.pdf',{type: "text/pdf"});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="myBill.pdf";
link.click();
});
'response' 包含来自 'MyPdfFileAPIstreamURl' 的 servlet 输出流的 PDF 字节数组。而且流也没有加密。
因此,当我单击该链接时,会成功下载一个大小约为 200KB 的 PDF 文件。但是当我打开这个文件时,它会打开空白页。下载的pdf文件的起始内容在图片中。
我不明白这里有什么问题。救命!
这是下载的pdf文件开始内容:
【问题讨论】:
-
您使用的媒体类型为 "text/pdf";这是自找麻烦,pdf不是文本格式,是二进制,把它当成文本可以毁掉它。请改用 application/pdf。
-
@mkl 将其更改为 application /pdf 但问题仍然相同。
-
这里使用 text/pdf 仍然是错误的。此外,您的屏幕截图看起来确实像某些代码将文件视为文本,使用单字节编码(Latin1)读取并使用 UTF-8 写入。
-
这可能会对您有所帮助:stackoverflow.com/a/31763030/5042982。在 AngularJS 中添加
responseType :blob对我有用。
标签: javascript pdf