我的问题是如何将图像上传到亚马逊。我正在寻找一种解决方案,它不会将文件保存在服务器上,然后将其上传到亚马逊。
我在谷歌上找到了pkgcloud,在README.md上显示:
特别注意的是,方法是流和管道能力。
有人能解释一下这意味着什么吗?如果这是我想要的吗?
Yupp,这意味着您已经找到了正确类型的s3
库。
这意味着这个库公开了"流"。以下是定义流的API:http://nodejs.org/api/stream.html
使用节点的流接口,您可以将任何可读的流(在本例中为POST的主体)管道传输到任何可写的流(在此例中为S3上传)。
下面是一个如何将文件直接上传到另一种支持流的库的例子:如何在Express.js中处理POSTed文件而不进行磁盘写入
编辑:这是一个的例子
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!"))