Загрузка файлов в Laravel
Доброго времени суток. В данной статье хочу описать процесс загрузки файлов в Laravel. Сам процесс не сложен. Но есть некоторые нюансы, с которыми я столкнулся. Вот и хочу поделиться, да и сохранить для себя на будущее.
Процесс установки и настройки Laravel я описывать не буду. На момент написания статьи актуальная версия Laravel 5.3 поэтому для нее и буду описывать.
Контроллер для загрузки файлов
Создадим контроллер для загрузки файлов и назовем его UploadController. Используем artisan команду:
php artisan make:controller UploadController
И добавим в него два метода:
- getForm – для отображения формы для загрузки файлов
- upload – метода для самой загрузки фалов
Поместим в наш контроллер следующий код:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; class UploadController extends Controller { public function getForm() { return view('upload-form'); } public function upload(Request $request) { foreach ($request->file() as $file) { foreach ($file as $f) { $f->move(storage_path('images'), time().'_'.$f->getClientOriginalName()); } } return "Успех"; } }
Рассмотрим код. Метод getForm, просто возвращает вьюшку upload-form.blade.php.
А вот метод upload уже более интересен. Принимаем запрос. Затем перебираем массивы и переносим файлы в storage_path(‘images’) с новым названием.
Один момент, нам нужно создать папку images в storage.
Отлично давайте создадим вьюшку для загрузки фалов
Создание view для загрузки файлов
Создадим вьюшку в resources/views с названием upload-form.blade.php и поместим в нее следующий код:
<!DOCTYPE html> <html> <head> <title>Upload File</title> </head> <body> <form method="post" action="{{ route('upload_file') }}" enctype="multipart/form-data"> <input name="_token" type="hidden" value="{{ csrf_token() }}"> <input type="file" multiple name="file[]"> <button type="submit">Загрузить</button> </form> </body> </html>
И последний штрих – необходимо создать роуты.
Создание роутов
Открываем файл routes/web.php и добавляем в него следующий код:
… Route::get('upload',['as' => 'upload_form', 'uses' => 'UploadController@getForm']); Route::post('upload',['as' => 'upload_file','uses' => 'UploadController@upload']); …
Думаю, тут пояснять нечего.
Ну все, можно переходить к проверке. Посмотрим в папку storage/images, сейчас она пуста.
Переходим по адресу <ваш_сайт>/upload.
Жмем «Обзор», выбираем один или несколько файлов. И жмем «Загрузить»,
Отлично загрузка прошла.
Теперь переходим в папку storage/images и смотрим. У нас появились три файла.
Мы с вами рассмотрели, как загружать файлы в Laravel.
Не забываем подписаться, чтобы не пропустить выхода новых статей: VK , Facebook, Twitter.
Помогло, спасибо. А как сделать, чтобы и в БД сразу записывалось изображение, точнее ссылка?
Вот у Вас путь к файлу: storage_path(‘images’).’/’. time().’_’.$f->getClientOriginalName()
Я видел этот путь, но как только уже не писал, не хочет добавлять.
$photos->create([
‘file’ => $file->store(‘image’, ‘public’)
]);