使用Express.js从Angular.js下载一个文件
Download a file from Angular.js with Express.js
在我的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。
相关文章:
- Sails.js:同时发布文本输入和一个文件
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- Angular js-返回一个包含类似
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 如何在react js中将值从一个组件发送到另一个组件
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- Ember.js - 一个视图多个布局(已登录/未登录)
- Ember.js:一个模型如何观察其他模型
- 三.js一个物体可以同时旋转和移动吗?
- 护照 JS - 一个登录表单 - 重定向到不同的 URI,具体取决于用户角色
- Backbone JS:一个视图可以触发其他视图的更新
- WebGL/Three.js一个复杂对象(网格)上的不同材质
- Backbone.js一个模型被多个视图修改
- Html5 js一个页面看起来多页面
- Ext JS -一个开始
- JQuery / JS -一个选择器用于多个输入
- 开始使用Underscore.js(一个简单的运行程序)
- (video - js)一个视频出错会导致其他所有视频无法播放
- 欧芹.js - 一个多步骤功能适用于所有形式