如何在angularjs中请求下载文件
How to request files for download aync in angularjs?
我正在使用angularjs
,想提供一个下载按钮。
问题:在从后端返回文件之前,该按钮会在后端触发长时间运行(15 秒)的进程。同时不应阻止用户。
所以我想我可以在点击时使用 angularjs 在后台获取文件,并在异步接收时提供下载。
<a ng-href="{{service.pdf()}}" target="_blank">download</a>
function pdf() {
return "http://path.to.the.service/filename.pdf";
}
这样我就可以直接打开另一个页面。这有效,但我想在后台获取它,而不是打开新窗口。
这可能吗?
也许最好的解决方案是为您使用此 html 代码按钮?让我们试试这个:
<a ng-href="{{service.pdf()}}" target="_self">download</a>
但你也可以用AngularJS做到这一点。例如,您有如下所示的代码:
<button type="button" ng-click="downloadFile()" name="button">Download file</button>
ng-单击调用你下载文件()函数。您可以在此功能中执行下载操作:
$http.get('/path/to/your/file', { responseType: 'blob' })
.then((response) => {
var windowUrl = $window.URL || $window.webkitURL;
var anchor = angular.element('<a></a>');
anchor
.attr({
href: windowUrl.createObjectURL(response.data),
download: 'file.txt',
});
anchor[0].click();
}
});
此解决方案也适用于具有基于令牌的授权(使用拦截器)的 API。但是如果你想在IE和Mozilla中保存blob文件,你应该添加更多的代码。
另一种方法是使用隐藏的 iframe 下载文件。这可用于在一个页面中下载多个文件的场景 - <a>
方法在 FF 上不起作用。
$scope.downloadUrl = function (url) {
var oIframe = window.document.createElement('iframe');
var $body = $(document.body);
var $oIframe = $(oIframe).attr({
src: url,
style: 'display:none;'
});
$body.append($oIframe);
}
您可以在Chrome和FF中下载多个文件,但是IE您不走运。
相关文章:
- 请求准备一个文件并返回路径,允许用户在准备好时下载
- PJAX请求完成并下载资产后的回调
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- 如何在Liferay serveResource(-,-)方法中从AJAX请求下载文件
- 节点:通过请求下载zip,zip已损坏
- 将 JSON 下载为文件:IE-11 抛出 414 请求 URI 太大
- ExtJS 5 - 从 POST servlet 请求下载文件
- node.js从http请求列表中将图像下载到服务器
- Http 文件下载请求停止 JQuery ajax 调用
- XMLHttp请求以块的形式下载大型HTML5视频
- 内容长度不在请求中,但设置了标头.下载后文件无法打开
- 如何在angularjs中请求下载文件
- 下载通过 nodejs 响应 POST 请求而发送的文件
- 为什么我需要 CORS 标头来请求可下载的链接
- 尝试通过PHP通过XML请求下载图像文件
- NodeJS-如何通过请求下载文件
- 作为非管理员用户,可以请求下载javascript文件
- 如何使浏览器从xhr请求下载文件
- 用javascript的REST请求下载zip文件夹.React.js
- 发送请求下载文件,用Javascript捕获响应