Загрузка изображений из интерфейса

#php #laravel #octobercms

#php #laravel #octobercms

Вопрос:

Я пытаюсь загрузить файл изображения из интерфейса в OctoberCMS

У меня есть образцовый человек и отношение:

 public $attachOne = [
    'photo' => 'SystemModelsFile'
];
 

В php-блоке с формой загрузки:

 public function onUploadImage() {
    $person = Person::where('id', '=', $this->param('id'))->first();
    $person->photo = Input::file('avatar');
    $person->save();
}
 

И мой шаблон:

 <form method="POST" action="/persons/person/{{person.id}}" accept-charset="UTF-8" enctype="multipart/form-data">
<input type="hidden" name="_handler" value="onUploadImage">
<input type="file" name="avatar" id="avatar" />

{{ form_token() }}
{{ form_sessionKey() }}

<button type="submit" data-attach-loading>Upload</button>
 

После отправки он сохраняет только путь к БД ‘http://my-site/storage/app/uploads/public /’ и не загружает никаких файлов в файловую систему. Похоже, что нет каких-либо разрешений, но я могу легко загружать изображения из бэкэнда.

Где моя ошибка?

Ответ №1:

Вы должны получить загруженный файл из запроса и сохранить его на одном из настроенных дисков. И сохраните путь к изображению в базе данных.

Предположим storage/app/public/images , что это каталог, в котором должны храниться загруженные изображения.

 public function onUploadImage() {

    if(request()->hasFile('avatar') amp;amp; request()->file('avatar')->isValid()) {

        $file = request()->file('avatar');
        $filename = $file->getClientOriginalName();

        $person = Person::where('id', '=', $this->param('id'))->first();
        $person->photo = $file->storeAs('images', $filename)
        $person->save();
    }
}
 

Ответ №2:

Вот решение.

 if(request()->hasFile('avatar') amp;amp; request()->file('avatar')->isValid()) {

        $file = new SystemModelsFile;
        $file->data = Input::file('avatar');
        $file->is_public = true;
        $file->save();

        $person = Person::where('id', '=', $this->param('id'))->first();
        $person->photo()->add($file);
        $person->save();
    }