【问题标题】:File upload API on EC2 with ELB and S3带有 ELB 和 S3 的 EC2 上的文件上传 API
【发布时间】:2014-12-07 00:20:17
【问题描述】:

我正在使用 NodeJS 和 AWS 开发应用服务器。

我正在使用 ELB 和 EC2 设置服务器环境。

我使用 ELB 作为负载均衡器,并为其附加了几个应用服务器 EC2 实例。

一个 EC2 实例用于 MongoDB。

我的问题是关于请求,包括文件上传。

我认为上传的文件不应该在应用服务器(EC2实例)中,所以我会尝试将上传的文件保存在S3中并允许应用服务器(EC2实例)访问它。

粗略的解决方案是,如果应用服务器接受来自客户端的文件,则将其移动到 S3 并删除应用服务器上的文件。

但是那样会导致一些性能损失,我不觉得这是一种干净的方式。

这是最好的方法吗?或者有另一种方法来解决它。

我认为这是将文件上传到 S3 的最佳方式。

但文件与其他数据一起上传。 (例如,个人资料上传-名称:字符串,年龄:数字,profileImage:文件)

我需要在应用服务器上处理其他数据,所以客户端不应该直接上传到S3。

有没有更好的办法?

请救救我。

P.S:如果您因为我不是本地人而无法理解我的表达,请告诉我。如果是这样,我会尽力为它添加一些解释!

【问题讨论】:

    标签: amazon-web-services architecture amazon-ec2 amazon-s3 amazon-elb


    【解决方案1】:

    您可以使用允许最终用户写入您的存储桶的临时凭证直接上传到 S3。

    有一篇很好的文章,其中包含详细的代码,可以完全按照您正在尝试使用 node.js here 执行的操作。

    引用外部链接的答案在 SO 上是不受欢迎的,所以简而言之:

    • 在您的应用程序中包含 aws sdk
    • 为其提供适当的凭据
    • 使用这些凭据生成寿命较短的签名 URL
    • 为最终用户提供签名的 URL,然后他们可以用来上传,最好是与进度反馈异步

    【讨论】:

    • 谢谢@chris。我正在尝试用您的答案解决问题,但还有另一个问题。我成功获得了预签名的 url,我可以直接从浏览器将图像上传到 S3(我正在使用 post-man:google-chrome 扩展程序进行测试)。但是每个上传的图像文件都被破坏了。该文件已上传,其字节与原始文件相同(我没有严格检查)。但下载图像文件并执行后,我收到消息 - 文件无法打开。文件格式损坏或无法识别。 (我上传了文件 png 和 jpeg)。对我有什么解决办法吗?我为此挣扎了 2 天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2015-06-25
    • 2021-04-14
    • 2012-03-31
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多