通过服务器将S3中的图像流传输到客户端的最佳做法

问题描述 投票:1回答:1

我正在尝试找到将图像从s3流传输到客户端应用程序的最佳实践。

我使用移动设备上的抖动(类似于instagram)创建了类似网格的布局。我的客户如何访问其所有图像?

这是我当前的设置:客户端打开其配置文件屏幕(该屏幕包含按时间戳排序的所有图像的网格状布局)。这将自动从服务器请求所有图像。我的python3后端服务器使用boto3访问S3和dynamodb表。 Dynamodb表具有客户端上载的所有图像路径的列表,并按时间戳排序。一旦获得路径,就可以使用该路径先将所有图像下载到服务器,然后再将其发送到客户端。

基本上,我的服务器是中间人,负责下载并将图像发送回客户端。这是正确的做法吗?看来,如果客户端直接访问S3,它将更快,但是我不确定那是否安全。另外,我不知道如何在不给aws凭据的情况下让客户访问S3 ...

任何建议将不胜感激。预先谢谢!

amazon-web-services flutter amazon-s3 dart amazon-dynamodb
1个回答
0
投票

您正在做的事情将起作用,并且如果您正在为快速使某件事情进行优化而进行优化,而不必过多担心服务器资源的浪费,不必要的计算,以及您是否不担心可伸缩性,这可能是最好的选择。

但是,如果您担心可伸缩性和较低的延迟以及对这些图像资源的安全访问,则可能需要改进当前的体系结构。

一旦获得路径,我将使用该路径将所有图像首先下载到我的服务器,然后将其发送到客户端。

这是第一部分,我将尝试摆脱的第一部分,因为您实际上并不需要后端来下载这些图像并自行流化。但是,似乎仍然有必要根据谁拥有资源来控制对资源的访问。我会考虑将其切换到以下设置以改善延迟,并花费更少的服务器资源来完成此工作:

  • 一旦获得后端服务中的路径,s3对象的generate Presigned urls,这将使您的客户端临时访问这些资源(根据您的需要,您可以调整希望URL访问工作多长时间的时间范围)。
  • 然后,将这些链接发送到您的客户端,以便它可以直接从S3流式传输URL,而不是让服务器成为中间人。

一旦完成此设置,我将尝试考虑使用Amazon CloudFront通过CloudFront为您提供的CDN功能来改善对对象的访问,特别是如果您的客户端分布在不同的地理区域。我可以看到AFA,you can also make CloudFront work with presigned URLs

这是正确的做法吗?看来,如果客户端直接访问S3,速度会更快,但我不确定那是否安全

Presigned URL是减轻对S3对象的不受控制的访问的方法。但是,您可能需要担心边缘情况(例如,当客户端对S3对象的访问权限到期时客户端应如何采取行动,以使用户不会注意到这一点,等等)。如果您担心扩展性,那么所有这些都是使某项产品大规模运行的成本。

© www.soinside.com 2019 - 2024. All rights reserved.