Сохранить файл в хранилище после кодирования вмешательства

Я пытаюсь сохранить изображение, закодированное Intervention, в специальное хранилище

$converted_image = Image::make($req->file('image_file'));
$converted_image->resize(300, null, function ($constraint) {
    $constraint->aspectRatio();
});
$file=$converted_image->encode('png');
$path = Storage::putFileAs('images', $file->stream(), 'test.png');

возвращает ошибку:

Call to undefined method GuzzleHttp\Psr7\Stream::getRealPath()

Еще одна попытка с:

$path = Storage::putFileAs('images', $file->stream()->__toString(), 'test.png');

ошибка:

Call to a member function getRealPath() on string

Есть ли обходной путь для сохранения файла с помощью хранилища?


person user947668    schedule 22.01.2017    source источник


Ответы (2)


Проблема в том, что для Storage::putFileAs() требуется либо \Illuminate\Http\File, либо \Illuminate\Http\UploadedFile, поэтому он пытается вызвать на нем getRealPath().

Однако Storage::put этого не делает, и он с радостью примет PSR-7 Stream. Пытаться:

Storage::put('images/test.png', $file->stream());
person Dominic    schedule 21.02.2017
comment
@ user947668 это адекватно ответило на ваш вопрос? - person Dominic; 03.03.2017

опираясь на ответ Доминика:

вам нужен экземпляр File или UploadedFile.

Например:

Storage::putFileAs('images', new Illuminate\Http\File($file->stream()->__toString()), 'test.png');
person memical    schedule 05.08.2017
comment
почему минус? это действительное решение (было по крайней мере в то время) - person memical; 23.04.2020