Загрузка файлов в Laravel

Ромчик
4

laravelДоброго времени суток. В данной статье хочу описать процесс загрузки файлов в Laravel. Сам процесс не сложен. Но есть некоторые нюансы, с которыми я столкнулся. Вот и хочу поделиться, да и сохранить для себя на будущее.

Процесс установки и настройки Laravel я описывать не буду. На момент написания статьи актуальная версия Laravel 5.3 поэтому для нее и буду описывать.

Контроллер для загрузки файлов

Создадим контроллер для загрузки файлов и назовем его UploadController. Используем artisan команду:

php artisan make:controller UploadController

создание контроллера Upload с помощью artn

И добавим в него два метода:

  • 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.

форма загрузки файлов

Жмем «Обзор», выбираем один или несколько файлов. И жмем «Загрузить»,

ывбор файлов для загрузки

Отлично загрузка прошла.

загрузка файлов на сервер в Laravel

Теперь переходим в папку storage/images и смотрим. У нас появились три файла.

папка images в Laravel

Мы с вами рассмотрели, как загружать файлы в Laravel.

Не забываем подписаться, чтобы не пропустить выхода новых статей: VK , Facebook, Twitter.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger

  • Шурик - 21.03.2017 в 12:48

    Помогло, спасибо. А как сделать, чтобы и в БД сразу записывалось изображение, точнее ссылка?

    • Ромчик - 21.03.2017 в 12:52

      Вот у Вас путь к файлу: storage_path(‘images’).’/’. time().’_’.$f->getClientOriginalName()

    • Шурик - 21.03.2017 в 14:09

      Я видел этот путь, но как только уже не писал, не хочет добавлять.

    • Timur - 19.03.2020 в 09:38

      $photos->create([
      ‘file’ => $file->store(‘image’, ‘public’)
      ]);

  • ©2012-2020 По всем вопросам обращайтесь через форму обратной связиПолитика конфиденциальности

    Яндекс.Метрика