【问题标题】:How to receive an uploaded file using node.js formidable library and save it to Amazon S3 using knox?如何使用 node.js 强大的库接收上传的文件并使用 knox 将其保存到 Amazon S3?
【发布时间】:2011-11-22 06:45:50
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    看起来没有什么好办法。一个原因可能是节点强大的库将上传的文件保存到磁盘。我找不到任何其他选择。 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);
    

    【讨论】:

    【解决方案2】:

    这是安迪,AwsSum 的创建者:

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

    但是,我将考虑在下一个 (v0.3.0) 版本中添加从强大的流直接到 S3 的功能。不过,就目前而言,看看它是否有帮助。 :)

    【讨论】:

    • 它看起来很简单,但不确定为什么它不能在 Heroku 上运行。期待 v0.3.0 允许我们将上传的文件直接流式传输到 Amazon S3。这应该是事件驱动的,并针对低内存消耗进行了优化。
    • 同意,它将是事件驱动的。我将研究 express.bodyParser() 的胆量,它使用了强大的功能,我将复制其中的一部分。手指交叉。
    • 我决定不让它流式传输,而是从磁盘中取出,从那时起重试更容易。即使在磁盘上使用它,所有内容仍然是流式传输的,因此您不会使用太多内存:传入请求 ->(流式传输)到磁盘 ->(流式传输)到 S3。 :)
    猜你喜欢
    • 2013-06-22
    • 2011-10-10
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多