我正在开发一个Web应用程序。在我的应用程序中,我正在实现文件上传功能。我将上传的文件存储在aws s3存储桶中。我将文件上传到s3存储桶,如下所示。
$photo_file_path = $request->file('image_file')->store(
'images/artworks/gallery-images/'.uniqid(), 's3'
);
上面的代码工作正常。该文件上传到s3。但问题是我希望文件在上传到s3时是公开的,这样照片也可以从网址访问。我将桶策略和访问控制都设置为public。
这是我的存储桶政策
{
"Version": "2012-10-17",
"Id": "Policy1234566788",
"Statement": [
{
"Sid": "Stmt151234344545",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket"
}
]
}
正如您所看到的,我的存储桶现已公开用于访问控制和存储桶策略。
但是当我从Laravel上传文件时,它会上传到存储桶,但文件仍然是公开的。那么,如何在文件上传后将文件权限更改为公开,请?
答案 0 :(得分:2)
Laravel提供了不同的方法来存储文件。
最简单的方法之一是使用storePublicly()
。
这是一个例子
$photo_file_path = $request->file('image_file')->storePublicly(
'images/artworks/gallery-images/'.uniqid()
);
希望这有帮助。
答案 1 :(得分:0)
如果所有存储的文件都可以或应该公开,则可以添加'visibility' => 'public'
,这样驱动器中存储的任何文件都可以公开显示:
's3' => [
'driver' => 's3',
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'region' => ('AWS_REGION'),
'bucket' => env('AWS_BUCKET'),
'visibility' => 'public',
],
如果没有,则可以使用相同的设置(包括公共标志)配置另一个驱动器:
's3' => [
'driver' => 's3',
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'region' => ('AWS_REGION'),
'bucket' => env('AWS_BUCKET'),
],
's3Public' => [
'driver' => 's3',
'key' => env('AWS_KEY'),
'secret' => env('AWS_SECRET'),
'region' => ('AWS_REGION'),
'bucket' => env('AWS_BUCKET'),
'visibility' => 'public',
],
,然后致电商店选择具有公开可见性的驱动器:
$photo_file_path = $request->file('image_file')->store(
'images/artworks/gallery-images/'.uniqid(), 's3Public'
);