【问题标题】:Unable to upload file in s3 bucket using laravel 5.7- Argument 1 passed to League\Flysystem\AwsS3v3\AwsS3Adapter:无法使用 laravel 5.7 在 s3 存储桶中上传文件 - 参数 1 传递给 League\Flysystem\AwsS3v3\AwsS3Adapter:
【发布时间】:2021-01-19 10:37:30
【问题描述】:

我正在尝试将图像上传到 s3 存储桶,但无法这样做。得到以下 错误:

Storage::disk('s3')->put($filename, file_get_contents($file));

Argument 1 passed to League\Flysystem\AwsS3v3\AwsS3Adapter::__construct() must be an instance of Aws\S3\S3ClientInterface, instance of Aws\S3\S3Client given, called in /var/www/html/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php on line 208 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Argument 1 passed to League\\Flysystem\\AwsS3v3\\AwsS3Adapter::__construct() must be an instance of Aws\\S3\\S3ClientInterface, instance of Aws\\S3\\S3Client given, called in /var/www/html/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php on line 208 at /var/www/html/vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php:85)

我的 composer.json 包含:

...
"aws/aws-sdk-php": "3.0",
"laravel/framework": "5.7.*",
"league/flysystem-aws-s3-v3": "~1.0",
"league/flysystem-cached-adapter": "1.0",
...

我的文件系统.php:

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

AWS s3 用户权限 - AmazonS3FullAccess

AWS s3 存储桶 - 策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::[bucket-name]/*"
        }
    ]
}

【问题讨论】:

  • aws-php-sdk 的最低要求版本应为 3.20.0
  • 我换了版本,还是不行

标签: laravel amazon-s3 file-upload


【解决方案1】:

我在 Laravel 5.8 上遇到了问题,本地和 AWS s3 存储桶无法创建资源和 laravel 备份。

请运行此命令,它将修复它。

composer require league/flysystem-aws-s3-v3:~1.0

【讨论】:

    【解决方案2】:

    挣扎了4天多后,我把两个都删了 "aws/aws-sdk-php": "3.0""league/flysystem-aws-s3-v3": "~1.0", "league/flysystem-cached-adapter": "1.0", 来自 composer.json 并运行 composer require league/flysystem-aws-s3-v3

    在那之后,它起作用了:)

    【讨论】:

    • 我发现冲突,使用 laravel 8,返回"league/flysystem-aws-s3-v3": "~1.0" :(
    • 作曲家需要联赛/flysystem-aws-s3-v3。这对我不起作用,我被困在这里,有人有解决方案吗?目前已安装。联赛/flysystem-aws-s3-v3": "1.0
    【解决方案3】:

    我的解决方案是更新此文件中的两行 - /vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php

    旧:
    使用 Aws\S3Client;
    使用 Aws\S3ClientInterface;

    新功能:
    使用 Aws\S3\S3Client;
    使用 Aws\S3\S3ClientInterface;

    【讨论】:

    • 您永远不应该更改供应商文件
    猜你喜欢
    • 2021-05-11
    • 2018-01-19
    • 2022-01-10
    • 2020-09-02
    • 2020-09-02
    • 1970-01-01
    • 2021-04-16
    • 2021-05-27
    • 2018-02-16
    相关资源
    最近更新 更多