【问题标题】:File upload to s3 not working after setting visibility to public将可见性设置为公开后,文件上传到 s3 不起作用
【发布时间】:2022-06-11 19:00:33
【问题描述】:

尝试配置 Laravel 以上传到我的 aws s3 存储桶。在我将可见性更改为公开之前,它工作正常。然后它似乎可以工作,或者至少它没有显示任何错误,但没有任何内容上传到 aws。

这是我的注册控制器中我上传个人资料图片的部分

       if($request->hasFile('avatar')) {
            $file = $request->file('avatar');
            $filename = $file->getClientOriginalName();

            $file->storeAs('avatars/' . $user->id, $filename, 's3');

            $user->update([
                'avatar' => $filename,
            ]);
        }

这是filesystems.php中s3的配置

        's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        'throw' => false,
        'visibility' => 'public',
    ],

如果没有 'visibility' => 'public',,它可以正常工作,但是一旦我添加它,就不会再上传任何东西了。

【问题讨论】:

  • 您确定删除'visibility' => 'public' 有效吗?您检查了storage/logs 中的日志文件是否有错误?
  • 在您的控制器上,您可以尝试使用storePubliclyAs。所以尝试使用$file->storePubliclyAs('avatars/' . $user->id, $filename, 's3');
  • @aceraven777 已经尝试过 storePubliclyAs 并且这是同样的问题,在没有可见性的情况下进行了尝试,并且它确实在没有可见性的情况下保存了文件。日志文件中没有显示任何内容
  • 可能是您的 s3 存储桶的设置,您是否启用了 ACL?或者您的存储桶权限可能您已阻止所有访问。
  • @aceraven777 acls 被禁用并且阻止访问被关闭

标签: laravel amazon-web-services amazon-s3 file-upload


【解决方案1】:

对我有用的是允许公开访问我的存储桶并添加存储桶策略以使相关文件公开可读。您可以阅读official docs here

另外,请确保从 Laravel 中删除“可见性”=>“公共”行,因为这会阻止上传。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2012-12-17
    • 1970-01-01
    • 2016-01-09
    • 2013-05-01
    相关资源
    最近更新 更多