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

发布于 12-05 19:42 字数 679 浏览 0 评论 0原文

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

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

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

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

I would like to upload a form from a web page and directly save the file to S3 without first saving it to disk. This node.js app will be deployed to Heroku, where there is no local disk to save the file to.

The node-formidable library provides a great way to upload files and save them to disk. I am not sure how to turn off formidable (or connect-form) from saving file first. The Knox library on the other hand provides a way to read a file from the disk and save it on Amazon S3.

1) Is there a way to hook into formidable's events (on Data) to send the stream to Knox's events, so that I can directly save the uploaded file in my Amazon S3 bucket?
2) Are there any libraries or code snippets that can allow me to directly take the uploaded file and save it Amazon S3 using node.js?

There is a similar question here but the answers there do not address NOT saving the file to disk.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我三岁 2024-12-12 19:42:10

看来没有什么好的办法。原因之一可能是节点强大的库将上传的文件保存到磁盘。我找不到任何其他选择。 knox 库获取磁盘上保存的文件,并使用您的 Amazon S3 凭证将其上传到 Amazon。

由于在 Heroku 上我无法在本地保存文件,因此我最终使用了 transloadit 服务。尽管他们的身份验证文档有一些学习曲线,但我发现该服务很有用。

对于那些想要通过 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);

It looks like there is no good way to do it. One reason might be that the node-formidable library saves the uploaded file to disk. I could not find any options to do otherwise. The knox library takes the saved file on the disk and using your Amazon S3 credentials uploads it to Amazon.

Since on Heroku I cannot save files locally, I ended up using transloadit service. Though their authentication docs have some learning curve, I found the service useful.

For those who want to use transloadit using node.js, the following code sample may help (transloadit page had only Ruby and PHP examples)

var crypto, signature;
crypto = require('crypto');
signature = crypto.createHmac("sha1", 'auth secret').
    update('some string').
    digest("hex")
console.log(signature);
南街九尾狐 2024-12-12 19:42:10

我是 AwsSum 的创建者 Andy:

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

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

this is Andy, creator of AwsSum:

I just released v0.2.0 of this library. It uploads the files that were created by Express' bodyParser() though as you say, this won't work on Heroku:

However, I shall be looking at adding the ability to stream from formidable directly to S3 in the next (v0.3.0) version. For the moment though, take a look and see if it can help. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文