使用Express.js从Angular.js下载文件

在我的MEAN应用程序中,我需要提供一个链接来下载文件,链接必须隐藏,不能被未经授权的用户访问。 所以我想出了这个想法:将文件保存在服务器目录中,然后让Angular.js用ng-click="download()"发送一个$ HTTP请求到带有文件ID的express.js下载,(可能)用户名/密码。 首先这是一个安全的解决scheme? 其次,这里是我的代码,不工作,没有任何错误,但我甚至无法打开下载对话框:

客户端

 $scope.download=function(){ $http({method:'GET', url:'/download/'+image[0]['_id']}). success(function(data, status, headers, config) { var element = angular.element('<a/>'); element.attr({ href: 'data:attachment/csv;charset=utf-8,' + encodeURI(data), target: '_blank', download:'test.csv' })[0].click(); }). error(function(data, status, headers, config) { }); } 

服务器端

 app.namespace('/download/:documentID*', function() { app.all('/', function(req, res, next){ res.download('images/download/test.tif', 'test.tif', function(err){ if (err) { } else { next(); } }); }); }) 

上次我检查你不能通过ajax触发下载。 😉

你需要用例如target="_blank"创build一个<a> ,以便在新的标签页/窗口中打开。 不知道你的身份validation,但我不会明文发送。 你可以通过检查你的ajax请求中的证书来解决这个问题,然后打开一个新的标签页/窗口,这样就可以用某种一次性的标记下载文件。 你需要一些服务器端的变化。