Я пытаюсь загрузить изображения в свой каталог в laravel (доступ к ним с базой данных) - PullRequest
0 голосов
/ 08 июля 2020

Итак, я просмотрел несколько статей о inte rnet и StackOverflow и не могу понять этого. Поэтому, когда вы создаете new user, у вас не будет изображения в столбце таблицы, вы можете отредактировать его в настройках своего профиля. Итак, теперь я пытаюсь добавить изображение в directory и database, но у меня это не работает. Я добавил avatar (представляющий имя изображения) в базу данных как medium text.

МОЯ ФОРМА

<form action="updateImage" method="post" enctype="multipart/form-data">
   @csrf
   <div class="modal-body">
   <label for="image" class="custom-image">
     <i class="fa fa-cloud-upload"></i> Select a file
   </label>
   <input id="image" type="file"/>
   </div>
   <div class="modal-footer">
       <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
       <button type="submit" class="btn btn-primary">Save changes</button>
   </div>
</form>

МОЙ КОНТРОЛЛЕР

public function updateImage(Request $request)
    {

        $avatar = Auth::user()->id;

  
        if($request->hasfile('image'))
        {
            $file = $request->file('image');
            $extension = $file->getClientOriginalExtension();
            $filename = $file->getClientOriginalName();
            $file->move('uploads/face/', $filename);
            $avatar->avatar = $filename;
        }
        

        $avatar->save();
        
        return view('profile');
    }

МОЙ МАРШРУТ

Route::post('/updateImage', 'HomeController@updateImage')->middleware('user');

Я уже просмотрел много сообщений, поэтому все еще не нашел решения. Go мне проще <3. </p>

1 Ответ

0 голосов
/ 08 июля 2020

Вы пытались вызвать метод save для $avatar атрибута Auth :: user () (класса), который является просто идентификатором пользователя. Ознакомьтесь с документацией здесь , если у вас возникли проблемы с пониманием того, как сохранять красноречивые модели.

Я также действительно не понимаю, что такое $face, поскольку вы никогда не определяли эту переменную, кроме вас ' Вы пытаетесь вызвать для него метод.

Вам, вероятно, даже не нужно снова сохранять объект пользователя, поскольку вы просто обновляете изображение. Вместо этого вы можете просто сохранить файл в каталоге, соответствующем уникальному идентификатору пользователя. Что-то вроде:

 if($request->hasfile('image'))
    {
        $file = $request->file('image');
        $extension = $file->getClientOriginalExtension();
        $filename = $file->getClientOriginalName();
        $file->move('uploads/face/'.Auth::id().'/', $filename . $extension);
    }

подойдет для первой загрузки. Для дополнительных загрузок вам нужно будет проверить, есть ли у пользователя уже аватар, затем удалить файл и заменить его новым.

Если вы хотите вместо этого сохранить имя файла как атрибут вашего пользователя в базе данных вам нужно сначала обновить свои миграции, чтобы добавить атрибут для этого имени файла. Тогда что-то вроде:

 $filename; 

 if($request->hasfile('image'))
    {
        $file = $request->file('image');
        $extension = $file->getClientOriginalExtension();
        $filename = $file->getClientOriginalName();
        $file->move('uploads/face/', $filename . $extension);
    }
    $user = Auth::user();
    $user->avatar = $filename;
    $user->save();

будет работать нормально.

Надеюсь, это поможет. Я бы порекомендовал посмотреть видеоурок для Laravel, потому что они мне очень помогли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...