如何使用node.js强大的库接收上传的文件并使用knox将其保存到Amazon S3?

时间:2011-09-21 19:57:11

标签: file-upload node.js amazon-s3

我想从网页上传表单并直接将文件保存到S3而不先将其保存到磁盘。此node.js应用程序将部署到Heroku,其中没有本地磁盘将文件保存到。

node-formidable库提供了一种上传文件并将其保存到磁盘的好方法。我不知道如何首先从保存文件中关闭强大的(或连接形式)。另一方面,Knox库提供了一种从磁盘读取文件并将其保存在Amazon S3上的方法。

1)有没有办法挂钩强大的事件(在数据上)将流发送到Knox的事件,以便我可以直接将上传的文件保存在我的Amazon S3存储桶中? 2)是否有任何库或代码片段可以让我直接获取上传的文件并使用node.js将其保存为Amazon S3?

有一个类似的问题here,但那里的答案并没有解决不将文件保存到磁盘的问题。

2 个答案:

答案 0 :(得分:3)

看起来没有好办法。一个原因可能是node-formidable库将上载的文件保存到磁盘。我没有找到任何其他选择。 knox库将保存的文件保存在磁盘上,并使用您的Amazon S3凭据将其上传到Amazon。

因为在Heroku上我无法在本地保存文件,所以我最终使用了transloadit服务。虽然他们的authentication文档有一些学习曲线,但我发现该服务很有用。

对于那些想要使用node.js使用transloadit的人,以下代码示例可能有所帮助(transloadit页面只有Ruby和PHP示例)

var crypto, signature;
crypto = require('crypto');
signature = crypto.createHmac("sha1", 'auth secret').
    update('some string').
    digest("hex")
console.log(signature);

答案 1 :(得分:0)

这是AwsSum的创始人Andy:

我刚刚发布了这个库的v0.2.0。它会上传Express'bodyParser()创建的文件,但正如你所说,这对Heroku不起作用:

但是,我将考虑在下一个(v0.3.0)版本中添加从强大的流直接流式传输到S3的功能。暂时,看一看,看看它是否有帮助。 :)