1

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

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

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

有人可以解释这意味着什么,如果它是我要找的吗?

4

1 回答 1

3

是的,这意味着你找到了正确的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!"))

于 2013-02-06T10:05:12.127 回答