在NodeJS中的pkgcloud中,“流和管道能力”意味着什么

时间:2013-02-06 09:54:13

标签: node.js amazon-s3 pkgcloud

我的问题是将图片上传到亚马逊工作。 我一直在寻找一种不在服务器上保存文件的解决方案,然后将其上传到亚马逊。

谷歌搜索我找到了pkgcloud,在README.md上它说:

  

已经特别注意方法是流和   管能力。

有人可以解释一下这意味着什么,以及它是否正是我要找的?

1 个答案:

答案 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!"))