我的问题是将图片上传到亚马逊工作。 我一直在寻找一种不在服务器上保存文件的解决方案,然后将其上传到亚马逊。
谷歌搜索我找到了pkgcloud,在README.md上它说:
已经特别注意方法是流和 管能力。
有人可以解释一下这意味着什么,以及它是否正是我要找的?
答案 0 :(得分:3)
Yupp,这意味着您找到了合适的s3
库。
这意味着这个库暴露了“流”。以下是定义流的API:http://nodejs.org/api/stream.html
使用节点的流接口,您可以将任何可读流(在本例中为POST的正文)传输到任何可写流(在本例中为S3上载)。
以下是如何将文件上传直接传输到另一种支持流的库的示例:How to handle POSTed files in Express.js without doing a disk write
编辑:这是一个例子
var pkgcloud = require('pkgcloud'),
fs = require('fs');
var s3client = pkgcloud.storage.createClient({ /* ... */ });
app.post('/upload', function(req, res) {
var s3upload = s3client.upload({
container: 'a-container',
remote: 'remote-file-name.txt'
})
// pipe the image data directly to S3
req.pipe(s3upload);
});
编辑:要完成回答聊天中提出的问题:
由于流魔术, req.end()
会自动调用s3upload.end()
。如果OP希望在req结束时做任何其他事情,他可以轻松地做到:req.on('end', res.send("done!"))