我的应用程序将图像上传到s3。我使用前端渲染来获取图像的颜色,但是因为上传到s3会降低质量(jpeg'ish),所以我会得到更多的颜色。
$s3 = \Storage::disk('s3');
$s3->put('/images/file.jpg', '/images/file.jpg', 'public');
有没有办法防止这种质量损失?我注意到如果我使用aws控制台网站直接上传文件,质量保持不变,这是理想的。
谢谢!
答案 0 :(得分:4)
在控制器操作
中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');
有关详细信息,请参阅this
答案 1 :(得分:1)
我不熟悉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',
]);
效果很好。