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