Невозможно загрузить файл в корзину s3 с помощью laravel 5.7- Аргумент 1 передан в League Flysystem AwsS3v3 AwsS3Adapter:

#laravel #amazon-s3 #file-upload

#laravel #amazon-s3 #загрузка файла

Вопрос:

Я пытаюсь загрузить изображение в корзину s3, но не могу этого сделать. Получение следующей ошибки:

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

Argument 1 passed to LeagueFlysystemAwsS3v3AwsS3Adapter::__construct() must be an instance of AwsS3S3ClientInterface, instance of AwsS3S3Client 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",
...
  

Мой filesystems.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 bucket — политика:

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

Комментарии:

1. Минимальная требуемая версия aws-php-sdk должна быть 3.20.0

2. Я изменил версию, все еще не повезло

Ответ №1:

Я столкнулся с проблемой в Laravel 5.8, локальном и AWS s3 bucket не удалось создать резервные копии ресурсов и 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

После этого это сработало 🙂

Комментарии:

1. Я обнаружил конфликт, используя laravel 8, обратно "league/flysystem-aws-s3-v3": "~1.0" : (

2. композитору требуется league/flysystem-aws-s3-v3. Это не работает для меня, я застрял здесь, у кого-нибудь есть решение? в настоящее время это установлено. league/flysystem-aws-s3-v3″: «1.0

3. Я боролся с s3, используя laravel 9 и «league / flysystem-aws-s3-v3»: «^ 3.0», понижение до 1.0 исправило мои проблемы, связанные именно с использованием storeAs

Ответ №3:

Решением для меня было обновить две строки в этом файле — /vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php

Старый:
используйте Aws S3Client;
используйте Aws S3ClientInterface;

НОВОЕ:
используйте Aws S3 S3Client;
используйте Aws S3 S3ClientInterface;

Комментарии:

1. вы никогда не должны вносить изменения в файлы поставщика