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

6.3k views Asked by At

I am in the process of upgrading a project from Laravel 5 to 5.1. One package that needed to be updated was League\Flysystem.

I am using Intervention\Image to resize an image and then Flysystem to save it to S3. The code below was working with 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);

But now I am receiving the following error: fstat() expects parameter 1 to be resource, object given, thrown in league\flysystem\src\Util.php, line 250.

I am using "intervention/image": "~2.1", "league/flysystem-aws-s3-v3" : "~1.0",

Any ideas what might be causing this?

3

There are 3 answers

5
ChristianM On BEST ANSWER

You might have been lucky before some type casting on your $image object made a string out of it, I guess a simple change of your last line to

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

will fix the problem and is safer anyway as the put method officially only accepts strings (and looking at the implementation of php resources as wekk).
That should keep you compatible to changes in the long run.

2
Citizen On

The better way to do this is to type cast the encoded output:

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

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

i got version "intervention/image": "^2.4",

The __toString() didn't work for me, the file was created corrupted... i did ->stream()->getContents().