League/Flysystem fstat() 期望参数 1 为给定的资源、对象

League/Flysystem fstat() expects parameter 1 to be resource, object given

我正在将项目从 Laravel 5 升级到 5.1。需要更新的一个包是 League\Flysystem.

我正在使用 Intervention\Image 调整图像大小,然后使用 Flysystem 将其保存到 S3。下面的代码适用于 5.0 -

// Album ID
$id = $request->input('id');
// Filename for this photo
$filename = str_random() . ".jpg";

// Get the storage disk
$disk = Storage::disk('s3');

// Resize the photo
$image = Image::make($request->file('photo'));
$image->orientate();
$image->resize(1024, 748, function ($constraint) {
            $constraint->aspectRatio();
});
$image->encode('jpg');
// Save the photo to the disk
$disk->put("img/album/$id/$filename", $image);

但现在我收到以下错误: fstat() expects parameter 1 to be resource, object given,在第 250 行 league\flysystem\src\Util.php 中抛出。

我正在使用 "intervention/image": "~2.1""league/flysystem-aws-s3-v3" : "~1.0",

知道是什么原因造成的吗?

在对 $image 对象进行某种类型转换之前,您可能已经很幸运了,我猜想将您的最后一行简单地更改为

$disk->put("img/album/$id/$filename", $image->__toString());

会解决这个问题,而且更安全,因为 put 方法正式只接受字符串(并且将 php 资源的实现视为 wekk)。
这应该让你兼容长 运行.

中的变化

更好的方法是对编码输出进行类型转换:

http://image.intervention.io/api/encode

$image->encode('jpg');
$disk->put("img/album/$id/$filename", (string) $image);

我得到了版本 "intervention/image": "^2.4",

__toString() 对我不起作用,创建的文件已损坏... 我做到了 ->stream()->getContents()