我正在开发一个网络应用程序。在我的应用程序中,我实现了文件上传功能。我把上传的文件存储在aws s3存储桶中。我把文件上传到s3存储桶中,如下所示。
$photo_file_path = $request->file('image_file')->store(
'images/artworks/gallery-images/'.uniqid(), 's3'
);
上面的代码运行良好。文件上传到s3。但问题是我希望文件在上传到s3时是公开的,这样照片也可以从url访问。我将bucket策略和访问控制都设置为公开。
这是我的水桶政策
{
"Version": "2012-10-17",
"Id": "Policy1234566788",
"Statement": [
{
"Sid": "Stmt151234344545",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket"
}
]
}
如您所见,我的bucket现在对于访问控制和bucket策略都是公共的。
但是当我从Laravel上传文件时,它被上传到了bucket中,但文件仍然对公众隐藏,那么,请问一旦文件被上传,我如何将文件权限更改为公共?
3条答案
按热度按时间watbbzwu1#
Laravel提供了不同的方法来存储文件。
最简单的方法之一是使用
storePublicly()
:kzmpq1sx2#
如果你所有存储的文件都可以或者应该公开,你可以添加
'visibility' => 'public'
,这样任何存储在驱动器中的文件都可以公开:如果没有,你可以配置另一个驱动器与相同的设置包括这公共标志:
然后只需调用存储选择具有公共可见性的驱动器:
pu82cl6c3#
将
filesystems.disks.s3.visibility
设置为public
可以完美地工作。