javascript - 在 Angular 5 中,如何强制下载从经过身份验证的 API 检索到的 PDF

标签 javascript angular pdf angular5

我有一个使用身份验证的 API 端点。端点是一个 GET 端点,但是我不能简单地将它加载到浏览器中,因为端点正在 header 中寻找身份验证 token 。所以。为了从端点获取数据,我创建了一个服务(它使用自动放入正确身份验证 header 的 httpClient 对象的扩展。这是我的服务调用的样子(简化):

getReceipt(): Observable<any> {
    return this.http.get('the/url', {responseType: 'text'});
}

这是我在组件中调用时的样子:

this.myService.getReceipt().subscribe(data => {
    console.log('receipt data');
    console.log(data);
});

所以一切正常,但我不知道如何进行下一步,即实际下载 pdf。注意:我在控制台登录的“收据数据”是这样的:

%PDF-1.3
%����
1 0 obj
<</Author <> /Creator (cairo 1.14.6 (http://cairographics.org))
  /Keywords <> /Producer (WeasyPrint 0.42 \(http://weasyprint.org/\))
  /Title (Receipt)>>
endobj...

我不知道这是什么格式,但我猜这是原始格式的原始 pdf 数据。我怎样才能强制下载数据?

另请注意,我搜索了很多关于 SO 的帖子并尝试了一些东西。以下是我尝试过的几乎有效的方法:

var link = document.createElement('a');
link.href = 'the/url';
link.download = 'file.pdf';
link.dispatchEvent(new MouseEvent('click'));

这样做是强制下载,但是因为 header 中的 token 不正确,所以我得到的只是来自后端的消息“无效 token ”,而不是我的实际 pdf。

有什么想法吗?

最佳答案

您使用不正确的 responseType 返回 PDF 文档。它应该是 responseType: 'blob' 在你的情况下。所以你的 http 调用应该如下所示 -

getReceipt(): Observable<any> {
    return this.http.get('the/url', {responseType: 'blob'});
}

关于javascript - 在 Angular 5 中,如何强制下载从经过身份验证的 API 检索到的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434861/

相关文章:

forms - Angular 2 : 'ngFormModel' since it isn't a known native property

javascript - 无法使用 inAppBrowser cordova 在 android 中打开 pdf url

javascript - 一般来说,是否可以将递归函数转换为在 JavaScript 中使用手动堆栈的函数?

javascript - 使用jquery更新字段不会更新可观察的

javascript - 如何在 javascript 中更改特定的 tr bgcolor

angular - 如何检测 Angular 模板中是否发生错误?

javascript - SharePoint - Angular 2+ 中的 GetURLKeyValue

javascript - 使用javascript有条件地格式化php输出

python - 在 python 中将函数应用于目录的每个元素的内容时出现问题?

java - 如何在使用 iText 创建的 PDF 中显示阿拉伯语