【发布时间】:2018-12-25 00:51:33
【问题描述】:
我是 Angular 新手,继承了旧版本,请耐心等待。
我的 Angular 1.5.7 应用程序需要从受承载令牌身份验证 https://somedomain.com/api/doc/somefile.pdf 保护的 API 服务器获取文件。所以我需要设置一个这样的标题:Authorization: Bearer xxxxxxxxxxxx.
我尝试使用Postman 请求文件并设置标题Authorization: Bearer xxxxxxxxxxxx 并且有效。
在 Angular 1.5.7 中,我在 view.html 中有一个类似 <a href="{{url}}" ng-show="url" target="_blank"> PDF</a> 的链接,其中 {{url}} = https://somedomain.com/api/doc/somefile.pdf。
问题是我不知道如何在链接中添加标题。我认为这是不可能的。我必须创建一个这样的链接:<a>PDF</a>,当点击 Angular 接管时,打开一个新窗口并在那里加载文件。
我查看了这些可能解决我的问题的堆栈溢出问题,但老实说,我不知道如何实施这些解决方案:
更新
我的解决方案是使用下面的代码创建一个指令。它之所以有效,是因为当点击链接时,current 窗口已经设置了授权标头,因此授予了对文件的访问权限。
<a href="https://somedomain.com/api/doc/somefile.pdf" ng-click="openPdf($event)">PDF</a>
function openPdf($event) {
// Prevent default behavior when clicking a link
$event.preventDefault();
// Get filename from href
var filename = $event.target.href;
$http.get(filename, {responseType: 'arraybuffer'})
.success(function (data) {
var file = new Blob([data], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
// Open new windows and show PDF
window.open(fileURL);
});
}
【问题讨论】:
-
出于好奇,API 方法是什么样的?您要返回什么响应类型等?谢谢!