我的目标:
显示一个对话框,提示用户保存从aws下载的文件.
我的问题:
我目前正在使用awssum-amazon-s3来创建下载流.但是我只是设法将文件保存到我的服务器或将其流式传输到命令行......正如您从我的代码中看到的,我最后的尝试是尝试手动设置失败的内容处置标头.我不能使用res.download(),因为标题已经设置好了?
我怎样才能实现目标?
我的节点代码:
app.post('/dls/:dlKey', function(req, res, next){
// download the file via aws s3 here
var dlKey = req.param('dlKey');
Dl.findOne({key:dlKey}, function(err, dl){
if (err) return next(err);
var files = dl.dlFile;
var options = {
BucketName : 'xxxx',
ObjectName : files,
};
s3.GetObject(options, { stream : true }, function(err, data) {
// stream this file to stdout
fmt.sep();
data.Headers['Content-Disposition'] = 'attachment';
console.log(data.Headers);
data.Stream.pipe(fs.createWriteStream('test.pdf'));
data.Stream.on('end', function() {
console.log('File Downloaded!');
});
});
});
res.end('Successful Download Post!');
});
Run Code Online (Sandbox Code Playgroud)
我的角度代码:
$scope.dlComplete = …Run Code Online (Sandbox Code Playgroud) 我如何在nodeJS或Express中创建一次性下载链接?
我正在努力找到实现这一目标的最简单方法.我到目前为止的想法是:
使用fs流读取然后删除文件或以某种方式生成一个单击下载按钮后删除的链接/路由
这些实现是否可行?有更简单的方法吗?
任何帮助或示例代码将不胜感激!
-谢谢
所以继承我的设置:
var Promise = require("bluebird");
var request = Promise.promisify(require('request'));
Run Code Online (Sandbox Code Playgroud)
这有效:
request('url')
Run Code Online (Sandbox Code Playgroud)
它返回一个承诺
这不是:
request.post('url', {form: {type: 'artist'}})
Run Code Online (Sandbox Code Playgroud)
给我这个错误:
TypeError: Object function promisified(_arg0,_arg1) { ... }has no method 'post'
at /Users/beamer30/projects/wevo/controllers/music.js:85:30
at Array.map (native)
at MusicSearch.spotifyRelated (/Users/beamer30/projects/wevo/controllers/music.js:84:22)
at MusicSearch.findRelatedArtists (/Users/beamer30/projects/wevo/controllers/music.js:48:7)
at musicController.search (/Users/beamer30/projects/wevo/controllers/music.js:100:17)
at Layer.handle [as handle_request] (/Users/beamer30/projects/wevo/node_modules/express/lib/router/layer.js:76:5)
at next (/Users/beamer30/projects/wevo/node_modules/express/lib/router/route.js:100:13)
at Route.dispatch (/Users/beamer30/projects/wevo/node_modules/express/lib/router/route.js:81:3)
at Layer.handle [as handle_request] (/Users/beamer30/projects/wevo/node_modules/express/lib/router/layer.js:76:5)
at /Users/beamer30/projects/wevo/node_modules/express/lib/router/index.js:227:24
Run Code Online (Sandbox Code Playgroud)
关于如何使这项工作的任何想法?这样做的正确方法是什么?
我正在构建一个使用 mongo 数据库的 Meteor 应用程序。
我有一个集合,可能有数千个文档需要在不同时间更新。
我是在创建时运行 setTimeouts 还是每秒运行一次并循环遍历每个文档的 cron 作业?
每种做法的优点和缺点是什么?
将此放在上下文中:
我正在构建一个在线锦标赛系统。我可以举办 100 场锦标赛,这意味着我可以举办 1000 场比赛。
每场比赛都需要绝对在特定时间结束,并且可以在一定条件下提前结束。
我正在尝试按修改日期订购搜索结果.如果我想通过creationDate做到:
query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
Run Code Online (Sandbox Code Playgroud)
修改日期的关键是什么?所有NSSortDescriptor键列表或找到它们的方法都非常有用.
我有这个非常基本的组件:
Tile = React.createClass({
render: function(){
var styles = [
TileStyles.tile
];
return (
<div style={styles} test="test" />
);
}
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,它正在生成这个 html:
<div style="0:[object Object];" data-reactid=".0.$0"></div>
Run Code Online (Sandbox Code Playgroud)
为什么它给我 [object object] 而不是内联样式?显然我不需要在这里使用数组,但我在更复杂的组件上使用。
我究竟做错了什么?
更新:感谢大家的回答,但问题是我希望能够使用多种样式。
也就是在某些情况下使用 TileStyles.tile 和 TileStyles.active。
所以我需要访问此对象中的键值"key":
{
"__v": 0,
"_id": "5317b71c902ff0080046349f",
"user": "530ef48599c41200009bad9f",
"email": "asdfa@sdgdf.com",
"btcId": "9HjBb9eUhyXMKuVxSrTSkg",
"name": "Bitcoin Payments",
"dlFile": "a43ca076-4802-4cca-9648-82b2569ffc60.docx",
"key": "3518d5ce-badf-495c-a08f-dc28bb6d8a64",
"created": "2014-03-05T23:45:32.480Z"
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用:
console.log(body.key) -> Undefined
console.log(body['key'] -> undefined
console.log(body['"key"'] -> undefined
Run Code Online (Sandbox Code Playgroud)
body是存储对象的位置.
我认为它与键的字符串有关?或者在他们周围有""?但是我没有创建body变量,所以我无法控制它...
有关如何使其工作的任何想法?
可能重复:
我可以md5(sha1(密码))?
$pass = md5($_POST["pass"].sha1($_POST["pass"]))
Run Code Online (Sandbox Code Playgroud)
我在某个地方看到这个并且感到困惑.这是否读取密码并使用sha1然后md5或反向解密?还是有一些我遗失的东西?