从Laravel Quality Lost上传到S3

时间:2016-06-27 23:29:39

标签: php amazon-web-services amazon-s3

我的应用程序将图像上传到s3。我使用前端渲染来获取图像的颜色,但是因为上传到s3会降低质量(jpeg'ish),所以我会得到更多的颜色。

enter image description here

$s3 = \Storage::disk('s3');
$s3->put('/images/file.jpg', '/images/file.jpg', 'public');

有没有办法防止这种质量损失?我注意到如果我使用aws控制台网站直接上传文件,质量保持不变,这是理想的。

谢谢!

2 个答案:

答案 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',
]);

效果很好。