Php AWS S3-存储和服务非私有映像

Php AWS S3-存储和服务非私有映像,php,amazon-web-services,amazon-s3,flysystem,Php,Amazon Web Services,Amazon S3,Flysystem,我第一次使用S3实现文件上传(在本例中,具体是用户配置文件化身图像)。我现在已经创建了一个S3 bucket,用户可以上传一个图像,然后可以在bucket控制台中在线查看 我现在需要能够在请求时显示这些图像(即查看该用户的个人资料)。我假设这样做的过程是生成URL(例如)并将其用作图像标记的src,但是要做到这一点,必须将文件(或bucket)标记为public。这对我来说似乎是合理的,因为其中的文件不是真正的私有文件。当将bucket更新为public状态时,会出现一条消息,说明: 我们强烈建

我第一次使用S3实现文件上传(在本例中,具体是用户配置文件化身图像)。我现在已经创建了一个S3 bucket,用户可以上传一个图像,然后可以在bucket控制台中在线查看

我现在需要能够在请求时显示这些图像(即查看该用户的个人资料)。我假设这样做的过程是生成URL(例如)并将其用作图像标记的
src
,但是要做到这一点,必须将文件(或bucket)标记为public。这对我来说似乎是合理的,因为其中的文件不是真正的私有文件。当将bucket更新为public状态时,会出现一条消息,说明:

我们强烈建议您永远不要授予对S3存储桶的任何类型的公共访问权限


有没有一种新加入AWS的人看不到的、或者更安全的方式来实现像这样的直接图像链接?

警告是存在的,因为许多人无意中将信息公开。但是,如果您愿意Internet上的任何人随时访问这些特定文件,那么您当然可以将各个对象公开,或者创建Amazon S3 bucket策略以公开特定路径

授予访问权的另一种方法是创建一个URL,这是一个有时间限制的URL,用于授予对私有对象的访问权

您的应用程序将负责验证是否应授予用户访问特定对象的权限。然后它将生成URL,为访问提供持续时间。然后,应用程序可以将URL插入
src
字段,图像将正常显示。但是,一旦持续时间过去,它将不再可访问


这通常在提供对私有文件的访问时使用——类似于DropBox如何在不公开文件的情况下访问私有文件。

我建议将cloudfront放在静态资产的前端(不是双关语),这样它将在其所有数据中心提供服务,而不仅仅是在您上传的区域,我认为这会降低您的费用,因为它不会使用S3存储桶中的带宽。
这样,您就可以为S3存储桶授予cloudfront权限,而无需手动将存储桶中的文件设置为公共文件。谷歌如何为cloudfront和S3设置IAM用户,让您进行设置。

您的文件上载代码可以指定特定文件对每个人都具有只读访问权限。在PHP SDK中,这是“ACL”=>“public-read”,请参见中的管理可见性,您还可以使用读取流并将其代理和/或缓存,所有这些都在文档链接中