Я нахожусь в процессе обновления проекта с 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
, брошенный в league\flysystem\src\Util.php
линия 250
я использую "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()
,