【问题标题】:Stream that user uploads directly to Amazon s3用户直接上传到 Amazon s3 的流
【发布时间】:2013-02-07 01:17:48
【问题描述】:

在过去的几天里,我一直在努力让它发挥作用。

基本上我有一个带有type="file" 输入的HTML 表单。

我希望将此文件发送到 nodejs 并直接流式传输到 Amazon s3。这样我会在我的服务器上使用更少的存储空间(想象一下,如果 100 个人上传 1g,最后我的服务器将有 100g),所以如果我流式传输,我将只占用内存一小段时间

关于如何使用 express 执行此操作的任何提示?

【问题讨论】:

    标签: node.js amazon-s3 express


    【解决方案1】:

    我不确定您是在寻找 CORS 方法(用户直接上传到您的 S3 存储桶),还是使用 express 作为中间人的方法。

    如果您正在研究 CORS 方法(我建议您使用这种方法,除非您在将文件放入无法在客户端完成的 S3 之前对文件进行任何特殊处理),这应该可以帮助您:@987654321 @

    如果您打算将您的服务器用作中间点(即上传到您的服务器,然后从您的服务器上传到 S3),我听说过关于 Knox 的好消息 (https://github.com/LearnBoost/knox)。我玩过它,但实际上并没有使用它,因为我倾向于使用 CORS 方法。

    【讨论】:

    • 我认为有第三种方式是“流式传输”文件,而您将其节点直接发送到亚马逊,不是吗?
    • 这里的任何信息 (stackoverflow.com/questions/12526673/…) 您可能会觉得有用,因为您的问题似乎是重复的。至于第三个选项,我不太确定,因为这不是我曾经研究过的东西。如果你打算这样做,你也可以只使用 CORS 并完全减轻服务器的负载。
    • 好吧,我实际上正在寻找第三个选项。 :S 等等,如果我使用 CORS,从后端检查交易状态会不会很复杂?我怎么知道亚马逊生成的链接地址是什么?我怎么知道用户是否操纵了它?我觉得这是一种控制力下降..
    • 我所做的如下:1)用户尝试上传。我向我的服务器请求 S3 凭据。这将返回文章中提到的“清单”。它还为 S3 上的位置生成文件路径(用作键),并将所有文件信息插入 db,标记为不完整。 2)当客户端得到这个时,它会启动CORS上传。 3)上传完成后,向我的服务器发出请求,将数据库行更新为完成。 4)此时提醒用户上传成功
    • 它是一个签名的请求。当您在服务器上生成凭据时,您将拥有您的凭据对象,其中包括此内容,例如密钥(它将另存为的路径)、有效时间、上传权限等。您的响应还包括一个签名,即使用您的 AWS 密钥对对象进行 base64 编码。我现在不记得到底怎么做,但在文档中有解释。 AWS 然后使用您的密钥对对象进行编码(只有您和 AWS 应该知道这个密钥)。如果不匹配(例如,因为用户更改了某些内容),则请求被拒绝。
    猜你喜欢
    • 2011-09-01
    • 2011-05-12
    • 2013-09-06
    • 1970-01-01
    • 2014-10-23
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多