我在服务器上设置了基于Java的API。 URL = "ex.com"
它有一个返回PDF文件的端点。 URL = "ex.com/pdf"
它期望POST请求带有一个参数,指定正在请求哪个PDF。 params = { requestPDF: "report.pdf"}
我希望能够使用Angular Http.post observable来获取PDF,但它不断抛出HttpErrorResponse Http failure during parsing for http://ex.com/pdf
... Unexpected token % in JSON at position 0 at JSON.parse
。但它是一个PDF我不希望它被解析为JSON。
这是我的代码:
params = {location: "report.pdf"};
return this.http.post<Response>("http://ex.com/pdf", params)
.subscribe(
data => {
var file = new Blob([data], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
}
);
端点适用于PostMan。我可以使用“发送和下载”选项成功获取PDF文件。所以我只需要弄清楚如何在Angular中做。感谢帮助。
答案 0 :(得分:3)
尝试这样的事情......
首先,您需要文件保护程序节点包,以便运行
npm install --save file-saver
。
然后,尝试这样的东西,我复制粘贴我用于类似的东西的代码
public downloadPDF(): any {
var mediaType = 'application/pdf';
this.http.post(this.myUrl, {location: "report.pdf"}, { responseType: 'blob' }).subscribe(
(response) => {
var blob = new Blob([response], { type: mediaType });
saveAs(blob, 'report.pdf');
},
e => { throwError(e); }
);
}
这对我有用,但它只是用于保存文件。
让我知道它是否有效!
<小时/> 更新 - ANGULAR7&amp; FILESAVER V. ^ 2.0.1 +
我刚刚从Angular v.6和Filesaver v。&lt; 2.0.1迁移了我的应用程序(不知道它是什么版本,但它是2.0.1之前的版本)。
在这个新版本中,您必须更改导入:
import { saveAs } from 'file-saver/FileSaver';
到
import { saveAs } from 'file-saver';
其他一切都像以前的版本一样!