8 (8452) 32-00-84

Загрузка файлов, изображений Laravel

В Laravel 5.4 чтобы загрузить файл (изображение) нужна форма следующего вида в файле create.blade.php:

<form action="/admin/page" enctype="multipart/form-data" method="post">
    {{ csrf_field() }}
    <div class="form-group">
        <input type="text" name="title" class="form-control" placeholder="Заголовок">
    </div>
    <div class="form-group">
        <input type="file" name="img" accept="image/*">
    </div>
    <button type="submit" class="btn btn-default btn-block">Опубликовать</button>
</form>

и код контроллера:

public function store(Request $request)
    {

        $page= new Page($request->except('img'));
        if ($request->hasFile('img')) {
            $file = $request->file('img');
            $destinationPath =  public_path().'/house/uploads/';
            $filename = str_random(20) .'.' . $file->getClientOriginalExtension() ?: 'png';
            $page->img = $filename;
            if ($request->hasFile('img')) {
                $request->file('img')->move($destinationPath, $filename);
            }
        }
        $page->save();

        return redirect()->route('page.index');
    }

Есть более функциональный способ с обрезкой и маштабированием изображения.

Покажу на примере из одного моего проекта:

public function update($id, Request $request)
    {

        $file = Input::file('img');
        $img = Image::make(Input::file('img'));
        $path =  public_path().'/house/uploads/';
        $filename = str_random(20) .'.' . $file->getClientOriginalExtension() ?: 'png';
        $img->save($path . $filename);
        $img->fit(270, 200, function ($constraint) {
            $constraint->upsize();
        });
        $img->save($path . 'trumb_' . $filename);

        $foodcat = FoodCat::findOrFail($id);
        $foodcat->title = $request->title;
        $foodcat->browser_title = $request->browser_title;
        $foodcat->slug = $request->slug;
        $foodcat->description = $request->description;
        $foodcat->img = $filename;
        $foodcat->save();

        return redirect()->route('menu.index');
    }

Для этого необходимо установить на Laravel пару дополнительных библиотек:

http://image.intervention.io/

https://laravelcollective.com/

Инструкции по инсталяции даны на официальном сайте.

Цена на 17 ноября 2018 г.
  • Москва - 10 000 р.
  • Несколько регионов - 30 000 р.