Загрузка на S3 из Laravel Quality Lost
Мое приложение загружает изображения на s3. Я использую интерфейсный рендеринг, чтобы получить цвета изображения, но поскольку загрузка в s3 снижает качество (jpeg'ish), я получаю больше цветов, чем нужно.
![enter image description here]()
$s3 = \Storage::disk('s3');
$s3->put('/images/file.jpg', '/images/file.jpg', 'public');
Есть ли способ предотвратить эту потерю качества? Я заметил, что если я загружаю файл напрямую с помощью веб-сайта консоли aws, качество остается неизменным, что является идеальным.
Спасибо!
Ответы
Ответ 1
В контроллере Action
public function uploadFileToS3(Request $request)
{
$image = $request->file('image');
}
Затем нам нужно назначить имя файла для загруженного файла. Вы можете оставить его как исходное имя файла, но в большинстве случаев вы захотите изменить его, чтобы сохранить согласованность. Давайте изменим его на временную метку и добавим к нему расширение файла.
$imageFileName = time() . '.' . $image->getClientOriginalExtension();
Теперь получите содержимое изображения следующим образом
$s3 = \Storage::disk('s3');
$filePath = '/images/file.jpg' . $imageFileName;
$s3->put($filePath, file_get_contents($image), 'public');
Для получения дополнительной информации вы можете обратиться к этому
Ответ 2
Я не знаком с Laravel, но знаком с AWS S3, и я использую aws-sdk-php.
Насколько я знаю, ни AWS S3, ни php-sdk не делают ничего неявно под капотом. Поэтому в вашем проекте должно быть что-то не так.
Вы можете попробовать использовать простой aws-sdk-php:
$s3 = S3Client::factory([
'region' => 'us-west-2',
'credentials' => $credentials,
'version' => 'latest',
]);
$s3->putObject([
'Bucket' => 'myBucket',
'Key' => 'test/img.jpg',
'SourceFile' => '/tmp/img.jpg',
]);
Он отлично работает.