将图像作为编码发送并在解码后上传到s3

时间:2015-11-15 19:27:59

标签: javascript php image amazon-web-services amazon-s3

我正在尝试在s3上传非常繁重的文件。现在图像首先进入服务器temp,然后我将其上传到s3。但是这个过程需要时间,如果多个用户同时上传大量图像,则会消耗高带宽,影响生产站点。鉴于我有3个以上的尺寸要上传,因此我正在调整上传的图像大小,将其他3个已调整大小的图像一起发送到s3。

我对此进行了研究,并找出了这3种可能的解决方案..

  1. 直接将图片上传到s3 ..这已被排除,因为在这种情况下我们必须公开aws键,我们无法解决。
  2. 添加队列中的所有图像并运行少量作业 ..在这种情况下,作业将在稍后从服务器上传图像到s3。这被排除了,因为这也会消耗一些带宽并且肯定会影响服务器性能,我们也配置了aws-eb,因此只要我们部署服务器,图像就会丢失,因此无法使用。
  3. 使用javascript ..在这种情况下,我们将从javascript将图像编码到base64中,并使用ajax将图像发送到服务器,然后尝试在那里解码并保存在某处然后将其上传到s3。
  4. 所以我的问题是它是否会节省使用第三选项上传重图像的时间? 我可以将图像编码发送到服务器,但是它会为用户节省一些上传时间吗?

    如果没有,那么我还可以做些什么来节省服务器的时间和带宽,同时将重图像上传到s3。 请帮忙。

3 个答案:

答案 0 :(得分:2)

如果可能,您应直接上传到Amazon S3 。这避免了双重处理'这些文件是一种更具可扩展性的解决方案。

您担心"暴露AWS密钥"。没有必要担心。您可以使用Security Token Service使用一组有限的权限生成临时的,有时间限制的凭据。它的工作原理如下:

  • 您的应用程序对用户进行身份验证并检查他们是否有权将对象上传到Amazon S3
  • 您的应用程序调用安全令牌服务并请求一组临时凭证,其权限仅允许上传到Amazon S3中的特定存储桶和子目录
  • 将这些凭据传递给您的用户,或在网页中使用这些凭据以允许他们上传对象

AWS的关键概念是大规模设计。直接上传到Amazon S3可以实现这一点,而上传到您自己的服务器首先会导致瓶颈(并且花费更多钱!)。

答案 1 :(得分:1)

在处理图像处理时,数字2实际上是推荐选项。您还可以使用Lambda函数进行图像转换。 (http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser.html

只要将图像添加到特定的S3存储桶,就会触发作业。

如果需要,您还可以将图像直接上传到S3(http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html

答案 2 :(得分:0)

我不确定你是否已经这样做了,但我已经使用了javascript sdk来做这件事,我正在做你在做什么,将图像保存在另一台服务器上,然后将它们转移到s3,但是使用javascript sdk,你可以直接进入s3,你可以添加事件来处理图像到达后。

  • 使用Cognito获取未经授权的用户/经过身份验证的用户访问权。
  • 在相关存储桶中授予作为Auticationicated User的权限。
  • 在配置编辑器中编辑CORS。
  • 使用javascript sdk中的代码执行您想要的任务。

我希望这会有所帮助。