Параметр SourceFile
ведет к пути файла для загрузки на S3, а не к двоичному
Вы можете использовать параметр Body
для замены SourceFile
или сохранения файла в локальном временном хранилище и получить путь для SourceFile
Как это:
public function store(Request $request)
{
$s3Client = new S3Client([
'region' => 'us-east-2',
'version' => 'latest',
'credentials' => [
'key' => $key,
'secret' => $secret
]
]);
$base64_str = substr($input['base64'], strpos($input['base64'], ",") + 1);
$image = base64_decode($base64_str);
Storage::disk('local')->put("/temp/saraza.jpg", $image);
$result = $s3Client->putObject([
'Bucket' => 's3-galgun',
'Key' => 'saraza.jpg',
'SourceFile' => Storage::disk('local')->path('/temp/saraza.jpg')
]);
Storage::delete('/temp/saraza.jpg');
return $this->sendResponse($result['ObjectURL'], 'message.', 'ObjectURL');
}
И, если вы используете S3 с Laravel, вам следует рассмотреть драйвер файловой системы S3 вместо того, чтобы обращаться к S3Client
вручную в вашем контроллере
Для этого добавьте драйвер S3 composer require league/flysystem-aws-s3-v3
, установите настройки S3 IAM в .env
или config\filesystems.php
Затем обновите файловую систему по умолчанию в config\filesystems
или укажите драйвер диска при использовании хранилища Storage::disk('s3')
Подробнее см. Документ здесь