#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);
}