Загрузка изображение через Laravel выглядит так:
(Создаем модель, контроллер. Это, наверняка понятно.)
(Также устанавливаем дополнение composer require laravelcollective/html)
Перед всем этим действием без лишних вопросов выполяем команду
php artisan storage:link
В Blade шаблоне прописываем {{Form::file('main_image')}}
В методе store / save такую конструкцию:
// Проверка, хотя можно обойтись и без нее
$this->validate($request, [
'main_image' => 'image|nullable|max:1999',
]);
// Если есть файл
if( $request->hasFile('main_image')){
// Имя и расширение файла
$filenameWithExt = $request->file('main_image')->getClientOriginalName();
// Только оригинальное имя файла
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
// Расширение
$extention = $request->file('main_image')->getClientOriginalExtension();
// Путь для сохранения
$fileNameToStore = "main_image/".$filename."_".time().".".$extention;
// Сохраняем файл
$path = $request->file('main_image')->storeAs('public/', $fileNameToStore);
}
// При выводе файла на странице нудно будет прибавить в начале "storage/"
$fileNameToStore . "storage/";
Загрузка нескольких изображений
Схема будем немного отличаться.
В Blade шаблоне прописываем {{Form::file('images[]', ['multiple'])}}
В методе store / save
// ...
$deal_item = Deal::find($id); // Наша модель
$this->validate($request, [
'main_image.*' => 'image|nullable|max:1999',
]);
// Обрабатываем несколько фотографий
if($request->hasFile('images'))
{
$images = $deal_item->images;
$files = $request->file('images');
foreach ($files as $file) {
$extention = $file->getClientOriginalExtension();
$fileNameToStore = 'deals/' . $deal_item->id . '/images/'.sha1_file($file).".".$extention;
$path = $file->storeAs('public', $fileNameToStore);
$images[] = "/storage/".$fileNameToStore;
}
$deal_item->images = $images;
}
В модель добавим преобразователь:
protected $casts = [ 'images' => 'array', ];
Вот и все. Получилось? Все понятно? Только запутал? Напиши в комментах.
Комментарии (1)
Не писать ответ