我有一个使用AngularJS和.NET Web API构建的应用程序,该应用程序使用Http Basic身份验证来提高安全性。它们位于不同的子域中,例如:mydomain.com和api.mydomain.com
我对网页API“安全网址https://api.mydomain.com/downloadFile ”产生一个Excel文件,我需要下载客户端。我尝试使用HTML5 Blob对象通过angularjs下载文件,但在尝试打开文件时始终收到“文件损坏”错误消息。
我想出的解决方案是创建一个隐藏的iframe以下载文件
<iframe style="display:none;" ng-src="{{downloadFileUrl}}"></iframe>
并在控制器中设置$ scope.downloadFileUrl
$scope.downloadFile = function () {
$scope.downloadFileUrl = $sce.trustAsResourceUrl('https://api.mydomain.com/downloadFile');
};
这行得通,但由于未从iframe发送HTTP'Authorization'标头作为请求的一部分,因此我被迫再次登录api。是否可以通过iframe的请求传递“授权”标头,或者通过其他任何方式从服务器安全下载文件而无需再次登录?
我也使用iframe下载方法。似乎是跨浏览器支持的最可靠的下载方法。所以我同意您的方法。
我认为您不能传递标题,我也一直在寻找它。而且,除非我完全不知道这样做的方法(并非不可想象),否则我相信它是无法完成的。
我已经通过使用票解决了这个问题。方法如下:每当显示可下载的数据时,我都会根据要下载的文件的主键(在我的情况下为guid)在服务器上生成票证。此票证是一个由几个字符组成的简单随机字符串,并存储在某个位置(在我的情况下只是db)。到期时间为10分钟。这意味着,单击带有查询字符串中的票证的下载URL将自动登录并开始下载。该票证在绝对到期,用户明确注销或成功完成下载后过期。
像这样:https : //api.mydomain.com/downloadFile/ {fileId}?ticket = fk37cltps7
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句