Как я могу сохранить изображение в базе данных из модального?

#html #laravel #modal-dialog

#HTML #laravel #модальный диалог

Вопрос:

Я хочу сохранить изображение через модальный, обычно я храню изображения таким образом. Но он никогда не сохраняется, он сохраняет null в базе данных, как будто файл даже не был загружен. Все остальное в модальном хранилище отлично сохраняется, кроме изображения.

Это код для изображения на моем контроллере.

  if($request->hasFile('image')){
            $file = $request->file('image');
            $extension = $file->getClientOriginalExtension();
            $filename = time() .'.'.$extension;
            $file->move('uploads/event/',$filename);
            $event->image = $filename;
        }

  

На мой взгляд, именно так я загружаю изображение.

  <div class="text-center">
                            <img src='http://ssl.gstatic.com/accounts/ui/avatar_2x.png'  width="300px" height="300px" class="avatar img-circle img-thumbnail" alt="avatar" name="image" >
                        </div><hr>
                        <div class="input-group">
                            <div class="custom-file">
                                <input type="file" class="custom-file-input" name="image" >
                                <label class="custom-file-label">Upload picture</label>
                            </div>
                        </div>

  

Комментарии:

1. когда вы загружаете изображение, сохраняется ли оно в папке где-нибудь на вашем сервере?

2. Вы должны использовать класс хранения в своем бэкэнде: laravel.com/docs/8.x/filesystem

3. @AristeidisKaravas да! Когда я сохраняю из обычного представления, изображения сохраняются в папке, но у меня возникают проблемы с сохранением их из модального.

Ответ №1:

Для кода, который у меня был, единственной проблемой было то, что я не использовал enctype=»multipart/form-data» . После поиска вариантов я нашел это и записал его в форме действия и форме-группе div. Это сработало, изображение сохраняется, а также обновляется.

   <form action="{{action('CalendarController@store')}}" method="POST"  enctype="multipart/form-data">

                    {{csrf_field()}}
                <div class="modal-body">
                    <div class="form-group" enctype="multipart/form-data">

  

Поскольку я получил эту работу, я начну внедрять другие коды для повышения производительности и начну изучать хранилище в laravel. Спасибо всем вам!

Ответ №2:

Попробуйте это на вашем контроллере:

 use Image;
    public function store(CreateRequest $request)
    {
        $file = $request->file('image');
        $imagename = $file->getClientOriginalName();
        $imageext = $file->getClientOriginalExtension();
        $path = 'upload/image/'.time().'.'.$imageext;
        $image = Image::make($file);
        $image->save($path);
        $input = $request->all();
        $input['image'] = $path;
        $user = $this->userRepository->create($input);
        return redirect(route('users.index'));
    }
  

сделайте то же самое с update() функцией

Файл будет сохранен в /public/upload/image папке

Ответ №3:

Вы также можете попробовать использовать ‘Intervention Image’ и File класс:

 composer require intervention/image
  
 <?php
...

use File;
use InterventionImageFacadesImage

...


if ($request->hasFile('image')) {
    $image = $request->file('image');
    $filename = 'image.'.$image->getClientOriginalExtension();
    $save_path = storage_path().'uploads/event/';
    $path = $save_path.$filename;
    $public_path = 'uploads/event/'.$filename;

    // Make the user a folder and set permissions
    File::makeDirectory($save_path, $mode = 0755, true, true);

    // Save the file to the server
    Image::make($image)->resize(300, 300)->save($save_path.$filename);

    // Save the public image path
    $event->image = $public_path;
    $event->save();
}

    return response()->json(['path' => $path], 200);
} else {
    return response()->json(false, 200);
}