在Laravel中上传后将aws s3文件权限设置为公共

pgvzfuti  于 2023-03-04  发布在  其他
关注(0)|答案(3)|浏览(175)

我正在开发一个网络应用程序。在我的应用程序中,我实现了文件上传功能。我把上传的文件存储在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中,但文件仍然对公众隐藏,那么,请问一旦文件被上传,我如何将文件权限更改为公共?

watbbzwu

watbbzwu1#

Laravel提供了不同的方法来存储文件。
最简单的方法之一是使用storePublicly()

$photo_file_path = $request->file('image_file')->storePublicly(
        'images/artworks/gallery-images/'.uniqid()
      );
kzmpq1sx

kzmpq1sx2#

如果你所有存储的文件都可以或者应该公开,你可以添加'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'
          );
pu82cl6c

pu82cl6c3#

filesystems.disks.s3.visibility设置为public可以完美地工作。

相关问题