#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. вы никогда не должны вносить изменения в файлы поставщика