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

时间:2014-04-13 20:48:21

标签: javascript node.js angularjs express

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

客户端

$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();
      }
    });
  });
})

1 个答案:

答案 0 :(得分:3)

上次我检查过你无法通过ajax触发下载。 ; - )

您需要创建一个<a>,例如target="_blank"所以它会在新的标签/窗口中打开。不知道你的身份验证,我不会用明文发送它们。您可以通过检查ajax请求中的凭据然后打开一个新的选项卡/窗口来解决这个问题,以便可以使用某种一次性令牌下载该文件。您需要对服务器端进行一些更改。