Laravel 和干预/图像:将照片上传到 AWS S3 存储桶会生成 0 字节文件

121*_*21c 0 php image laravel-5 intervention php-7

我在Laravel 中使用http://image.intervention.io/来调整图像大小,然后再将它们存储在 AWS S3 存储桶中。这是适用的代码:

$extension = $image->extension();
$realPath = $image->getRealPath();
$resizedImage = Image::make($realPath) // ->resize(255, 255); // resize or not, make() seems to always return an empty Image
$file_path = "posts/$post->id/images/image-$post->id-num-$pictureCount.$extension/"; 
$path = Storage::disk('s3')->put($file_path, $resizedImage->__toString(), ['visibility' => 'public']);
Run Code Online (Sandbox Code Playgroud)

调试时($path设置了线路上的断点),我可以看到它$realPath包含一个类似的值/private/var/folders/23/jl2dytp168g9g9s5j51w2m780000gn/T/php9047Fh- 去那里我可以看到我正在尝试的图像make()/ resize()

$resizedImage对象具有以下字段:

[encoded] => 
[mime] => image/jpeg
[dirname] => /private/var/folders/23/jl2dytp168g9g9s5j51w2m780000gn/T
[basename] => phpTNRdXe
[extension] => 
[filename] => phpTNRdXe
Run Code Online (Sandbox Code Playgroud)

我猜编码的属性应该包含类似 base 64 图像数据的内容?

检查 AWS S3 存储桶中的图像时,它总是作为 0 字节的图像上传。我在这里做错了什么?

干预被配置为使用 GD,如果它有任何不同

Olu*_*ule 5

Laravel File 类Symfony File 类的子,后者又是子类\ SplFileInfo

文件对象可以直接传入Image::make. Image::make 获取realPathfor\SplFileInfo对象。

图片::提出退货的实例图片$resizedImage->__toString()返回它的价值encoded领域。encoded空字符串开头。

应该在访问其编码值之前对图像进行编码

$resizedImage->encode();
Run Code Online (Sandbox Code Playgroud)

然后,

$path = Storage::disk('s3')->put($file_path, $resizedImage->__toString(), ['visibility' => 'public']);
Run Code Online (Sandbox Code Playgroud)