如何为 Laravel 8 配置 s3 文件系统

How to configure s3 filesystem for Laravel 8

我曾开发过一些较旧的 Laravel 应用程序 (5.x),这些应用程序已将上传映射到 AWS S3 磁盘,其中包含以下凭据:

's3' => [
        'driver' => 's3',
        'key' => env('AWS_KEY'),
        'secret' => env('AWS_SECRET'),
        'region' => env('AWS_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],

在 Laravel 8 中,按键已重命名:

'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'),
    ],

我试图以类似的方式映射我的价值观(因为名称变化不大)。我尝试将 example-uploads-int-s3-bucket.s3.amazonaws.comexample-uploads-int-s3-bucket 设置为存储桶(存储桶名称为 example-uploads-int-s3-bucket),但出现此错误:

{"message":"Error executing \"PutObject\" on \"/example-uploads-int-s3-bucket.s3.amazonaws.com/logos/Qwsx9aUpMDkF9dEvxfN3ov9yYDDqmqKZD63m7wug.png\"; AWS HTTP error: cURL error 3: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for /example-uploads-int-s3-bucket.s3.amazonaws.com/logos/Qwsx9aUpMDkF9dEvxfN3ov9yYDDqmqKZD63m7wug.png","context":{"userId":1,"exception":{"class":"Aws\S3\Exception\S3Exception","message":"Error executing \"PutObject\" on \"/example-uploads-int-s3-bucket.s3.amazonaws.com/logos/Qwsx9aUpMDkF9dEvxfN3ov9yYDDqmqKZD63m7wug.png\"; AWS HTTP error: cURL error 3: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for /example-uploads-int-s3-bucket.s3.amazonaws.com/logos/Qwsx9aUpMDkF9dEvxfN3ov9yYDDqmqKZD63m7wug.png","code":0,"file":"/var/www/example-site/src/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php:195","previous":{"class":"GuzzleHttp\Exception\RequestException","message":"cURL error 3: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for /example-uploads-int-s3-bucket.s3.amazonaws.com/logos/Qwsx9aUpMDkF9dEvxfN3ov9yYDDqmqKZD63m7wug.png","code":0,"file":"/var/www/example/src/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:211"}}},"level":400,"level_name":"ERROR","channel":"int","datetime":"2021-11-03T02:43:31.550758+00:00","extra":{}}

我正在查看 Laravel 文档(以及其他广泛的谷歌搜索),但没有发现任何迹象表明我可能做错了什么。任何人都可以提供任何见解吗?

我终于明白了!我不得不深入研究供应商库代码,但现在我知道如何配置它了:

首先,您可以看到端点是如何生成的:

Illuminate\Filessystem:put() ->AWSS3Adapter::upload() -> AWS\S3\ObjectUploader::upload() -> AWS\S3\ObjectUploader::promise() -> AWS\Api\Serializer::buildEndpoint()

其次,对于实际修复:

AWS_BUCKET=example-uploads-int-s3-bucket
AWS_URL=
AWS_ENDPOINT=https://s3.amazonaws.com