将imagejpeg()保存到S3

3
我有一个关于imagejpeg()的问题。我知道如何将图像保存/上传到S3。我的问题是,使用imagejpeg调整大小后,只保存到本地目录。我想将其保存到S3中。我正在使用Laravel。这是我的代码。感谢任何帮助。

S3配置和路径。

    $displaypath = '/cover/uploads/csspreview/';

    $s3 = \Storage::disk('s3');

    $img = $s3->get($data['uploaded_file_path']);

    $im = imagecreatefromstring($img);

    $width = imagesx($im);

    $height = imagesy($im);

    $newwidth = '335';

    $newheight = '500';


    $tuecolor = imagecreatetruecolor($newwidth, $newheight);

    imagecopyresampled($tuecolor, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

     // the above code is good.

    $path = './uploads/csspreview/'; // this is a local path only.

    imagejpeg($tuecolor,  $path.'/cover.jpg'); //save image as jpg (It will save to the file but I want it to save in s3)

尝试使用以下代码:Storage::disk('s3')->put($path.$file, $image); - Abhinav Verma
那么你的意思是,它会像这段代码一样吗?imagejpeg($tuecolor,Storage::disk('s3')->put($path.$file, $image)); - Vergel Andus Aranas
请勿在您的最后一行代码后添加“类似于这样的内容:Storage :: disk('s3') - > put($ path.'/ cover.jpg',$ tuecolor);” - Abhinav Verma
它不起作用。Imagejpeg()也会保存图像。那么它怎么能保存到s3呢? - Vergel Andus Aranas
在将本地副本上传到S3后,使用函数imagedestroy($tuecolor);删除本地副本。 - Abhinav Verma
它已经这样做了。但仍然不起作用。 - Vergel Andus Aranas
1个回答

4

这个方法很有效。如果您查看 imagejpeg 的文档,您可以看到他们是如何将输出作为图像的。链接

 $jpg_image = imagecreatefromjpeg('https://s3.amazonaws.com/sample.jpg');
 $imageName = 'imageNameToStoreOnS3.jpg';

 ob_start();
 imagejpeg($jpg_image);
 $image_contents = ob_get_clean();

 $finalResultImageFullPath = 'final_view/'.$imageName; //S3 filename with path
 $finalImage = $s3->put($finalResultImageFullPath, $image_contents, 'public'); //Store on S3

谢谢您,我到处搜索,这就是答案。非常感谢您。 - AnkitS
需要在结尾加上 ob_end_flush(); 吗? - AnkitS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接