我正在尝试将一些已调整大小的图像上传到S3,但不知何故所有图像都具有相同的大小。以不同尺寸在本地存储它们不会产生任何问题。我错过了什么?
public function uploadFileToS3(Request $request) {
$image = Image::make($request->file('image'))->encode('jpg', 75);
$s3 = Storage::disk('s3');
$image_file_name = $this->generateName($request->name) . '.jpg';
$file_path = '/' . config('folder') . '/' . $request->name . '/';
$s3->put($file_path.'original_'.$image_file_name, $image, 'public');
$s3->put($file_path.'medium_'.$image_file_name, $image->fit(300, 300), 'public');
$s3->put($file_path.'thumb_'.$image_file_name, $image->fit(100, 100), 'public');
return json_encode(array(
'filename' => $image_file_name
));
}
所有版本都成功存储在S3中,只有所有版本都以相同的大小存储
答案 0 :(得分:7)
我有两种可能的解决方案。
在尝试存储图像之前尝试完全执行图像处理:
$s3->put($file_path.'original_'.$image_file_name, $image, 'public');
$image->fit(300, 300);
$s3->put($file_path.'medium_'.$image_file_name, $image, 'public');
$image->fit(100, 100);
$s3->put($file_path.'thumb_'.$image_file_name, $image, 'public');
尝试将图像转换为字符串,实际的输出文件内容应该可以正常工作:
$s3->put($file_path.'original_'.$image_file_name, (string) $image, 'public');
答案 1 :(得分:0)
...我设法通过首先将调整大小的图像存储到本地tmp文件夹然后上传它来解决这个问题。这是一个我真的不喜欢的工作,因为在我看来,对于应该在Laravel中处理的东西来说,编码太多了。
$folder = $_SERVER['DOCUMENT_ROOT'] . '/tmp/';
$image_file_name = $this->generateName($request->name) . '.jpg';
// save original
$image->save($folder . 'original_' . $image_file_name);
$s3->put($file_path.'original_'.$image_file_name, fopen($folder.'original_'.$image_file_name, 'r+'), 'public');
// generate thumb
$image = $image->fit(100, 100);
$image->save($folder . 'thumb_' . $image_file_name);
$s3->put($file_path.'thumb_'.$image_file_name, fopen($folder.'thumb_'.$image_file_name, 'r+'), 'public');