用AngularJS下载文件

我需要提供一个链接来下载一个文件,这个链接必须被任何用户隐藏和访问,这里是我的代码,没有任何错误,但是我甚至无法打开下载对话框:

模板

<a ng-href="#" target="page" type="button" class="btn" ng-click="download()">Download</a> 

脚本文件

 $scope.download = function(){ //here i need to know the code,can anybody explain me } 

首先,您不能“隐藏/不公开”基于Web的技术(HTML / CSS / JavaScript)应用程序中的链接。 下载由客户端处理,所以下载/链接URL必须是公开的。 您可以尝试使用诸如“PHP或node.js等”的后端执行编程语言来在下载URL中“隐藏”保护参数,例如ID。 通过这种方式,您可以创build像http://www.myside.com/download/359FTBW!S3T387IHS这样的hash URL来隐藏像URL中的recordId这样的参数。

通过了解这一点,您的解决scheme非常简单。 只需使用HTML属性下载(如<a href="http://mydownloadurl" download>link text</a>来强制浏览器下载href源代码。 在这里不需要ng-click 。 不幸的是,Safari浏览器不支持download属性。 当浏览器正在处理下载时,这并不重要。 根据用户系统的操作系统configuration,该文件将被下载或直接在该系统上安装的程序中打开。 例如,如果某个pdf查看器应用程序可用,则PDF文件将在PDF查看器中打开。

我写了一个在AngularJS控制器$scope处理ng-href的Plunker 。 我希望这是你所需要的。

你的控制器:

 var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.fileHref = 'http://www.analysis.im/uploads/seminar/pdf-sample.pdf'; }); 

你的看法:

 <head> <meta charset="utf-8" /> <title>AngularJS Plunker</title> <script> document.write('<base href="' + document.location + '" />'); </script> <link rel="stylesheet" href="style.css" /> <script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.14/angular.js" data-semver="1.3.14"></script> <script src="app.js"></script> </head> <body ng-controller="MainCtrl"> <a ng-href="fileHref" download="yourFilename">Download</a> </body> </html> 

我不得不实现这个function。 还必须确保它适用于所有主要支持的浏览器。 这是相同的解决scheme!

快乐编码!

您的视图/ HTML

 <a target="_self" class="ui right floated btn btn-warning" href ng-click="downloadInvoice()"> Download </a> 

你的控制器

 $scope.downloadInvoice = function () { $http.post(url,requestData, {responseType:'arraybuffer',headers:header }) .success(function (response) { var file = new Blob([response], {type: 'application/pdf'}); var isChrome = !!window.chrome && !!window.chrome.webstore; var isIE = /*@cc_on!@*/false || !!document.documentMode; var isEdge = !isIE && !!window.StyleMedia; if (isChrome){ var url = window.URL || window.webkitURL; var downloadLink = angular.element('<a></a>'); downloadLink.attr('href',url.createObjectURL(file)); downloadLink.attr('target','_self'); downloadLink.attr('download', 'invoice.pdf'); downloadLink[0].click(); } else if(isEdge || isIE){ window.navigator.msSaveOrOpenBlob(file,'invoice.pdf'); } else { var fileURL = URL.createObjectURL(file); window.open(fileURL); } }) };