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

Download a file from Angular.js with Express.js

本文关键字:js 一个 文件 下载 Express Angular 使用      更新时间:2023-09-26

在我的MEAN应用程序中,我需要提供一个下载文件的链接,该链接必须隐藏,未经授权的用户不能访问。因此,我提出了将文件保存在服务器目录中的想法,并让Angular.js使用ng-click="download()"向express.js发送一个$HTTP请求,其中包含要下载的文件ID,以及(可能)用户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();
      }
    });
  });
})

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

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