我正在使用Amazon S3将文件上传到不同的文件夹中。所有文件夹和文件都是公开的,任何人都可以看到。我创建了一个私人文件夹,我想放置私有图像,这样我才能看到它们。我已经创建了一个存储桶策略规则,拒绝访问该文件夹。但是我怎么能看到文件呢?是否有像 https://s3.amazonaws.com/bucket/private_folder/file.jpg?secret_key=123 这样的特殊链接会让我和知道该密钥的人看到这些文件?
有没有办法上传可以通过使用secret_key,url或类似内容看到的私人文件?
答案 0 :(得分:9)
默认情况下,Amazon S3中的所有对象都是私有的。然后可以通过以下方式之一添加权限,使对象成为“公共”:
只要其中一种方法授予访问权限,该人就能够访问该对象。也可以指定覆盖允许权限的Deny
权限。
当通过未经身份验证的网址(例如s3.amazonaws.com/bucket-name/object-key
)访问对象时,上述规则决定了访问权限。但是,如果您对服务进行身份验证,则可以访问“私有”文件,例如使用您的用户凭据或使用预签名URL调用S3 API。
要了解其工作原理,请在Amazon S3管理控制台中单击一个私人文件,然后从“操作”菜单中选择打开。该对象将被打开。这是通过为浏览器提供预签名URL来完成的,该URL包括加密大小的URL和有效期。该URL将仅用于获取私有文件,直到定义的时间。
因此,要回答您的问题,您仍然可以通过以下方式访问私人文件:
请注意,您不要定义DENY规则,甚至覆盖您访问文件的能力。简单地允许您想要公开的目录更容易。
答案 1 :(得分:0)
您可以通过使用s3
方法创建temporary Url来访问temporaryUrl
私有文件。
$url = Storage::temporaryUrl(
'file.jpg', now()->addMinutes(5)
);
temporaryUrl
方法的参数为$path
,$expiration
和$option = []
。前两个参数是必需的,$option
的默认值是空的array
。