dima9595
@dima9595
Junior PHP

Как устроить мультизагрузку изображений Laravel 5?

Всем доброго времени суток!
Делаю мультизагрузку изображений, но почему-то не получается загрузить все изображения. Допустим, выбираю 3 изображения, а загружается 2. МБ кто нибудь подскажет как работать с мультизагрузкой? Так же, при мультизагрузке, в валидации, не могу использовать проверку на image и mime типы...
Контроллер:
$this->validate($request, [
                'title_news' => 'required|min:3|unique:news',
                'short_news' => 'required|min:5',
                'full_news' => 'required|min:5,',
                'preview_news' => 'required|image',  // Не работает image и mime
            ]);

            $commentsModerator = Auth::user()->role->news_role['premoderator_role'];    // Премодерация
            $addNews = News::create([
                'title_news' => $request->title_news,
                'short_news' => $request->short_news,
                'full_news' => $request->full_news,
                'author_news' => $userID,
                'commentsModerator_news' => $commentsModerator
            ]);

            if($addNews){
                foreach($request->file('preview_news') as $file){
                    // Оригинальное изображение
                    $fileNameOriginal[] = $addNews['id_news'] . '-' . time() . '-original.jpg'; // 1-1502110636-original.jpg
                    $uploadOriginal = Image::make($file)->save(public_path() . '/uploads/posts/news/preview/original/' . $addNews['id_news'] . '-' . time() . '-original.jpg');
                    // 200x200 изображение
                    $fileName200[] = $addNews['id_news'] . '-' . time() . '-200.jpg'; // 1-1502110636-200.jpg
                    $uploadOriginal200 = Image::make($file)->resize(200, 200)->save(public_path() . '/uploads/posts/news/preview/200/' . $addNews['id_news'] . '-' . time() . '-200.jpg');
                    // 50x50 изображение
                    $fileName50[] = $addNews['id_news'] . '-' . time() . '-50.jpg'; // 1-1502110636-50.jpg
                    $uploadOriginal50 = Image::make($file)->resize(50, 50)->save(public_path() . '/uploads/posts/news/preview/50/' . $addNews['id_news'] . '-' . time() . '-50.jpg');
                }

                $addPreview = Preview::create([
                    'idUser_preview' => $userID,
                    'idNews_preview' => $addNews['id_news'],
                    'original_preview' => json_encode($fileNameOriginal),
                    'x200_preview' => json_encode($fileName200),
                    'x50_preview' => json_encode($fileName50)
                ]);

                return redirect()->route('home')->with('successMessages', 'Вы успешно добавили новость!');
            }else{
                return redirect()->route('home')->with('warningMessages', 'Ошибка добавлении новости!');
            }

View:
<div class="panel-body">
        {{ Form::open(['route' => ['News.postAddNews', Auth::user()->id_users], 'files' => true, 'enctype' => 'multipart/form-data']) }}
        <div class="form-group {{ ($errors->first('title_news')) ? 'has-error' : '' }}">
            <label for="title_news" class="control-label">Заголовок новости:</label>
            <input type="text" class="form-control" name="title_news" placeholder="{{ ($errors->first('title_news')) }}">
        </div>

        <div class="form-group {{ ($errors->first('short_news')) ? 'has-error' : '' }}">
            <label for="short_news" class="control-label">Короткая новость:</label>
            {{ Form::textarea('short_news', '', ['class' => 'form-control', 'placeholder' => $errors->first('short_news')]) }}
        </div>

        <div class="form-group {{ ($errors->first('full_news')) ? 'has-error' : '' }}">
            <label for="full_news" class="control-label">Текст новости:</label>
            {{ Form::textarea('full_news', '', ['class' => 'form-control', 'placeholder' => $errors->first('full_news')]) }}
        </div>

        <div class="form-group {{ ($errors->first('preview_news')) ? 'has-error' : '' }}">
            <label for="preview_news">Превью картинка</label>
            <input type="file" name="preview_news[]" multiple="true" accept="image/jpeg,image/png,image/jpg">
            <p class="help-block">{{ $errors->first('preview_news') }}</p>
        </div>

        <div class="form-group">
            <button type="submit" class="btn btn-success"><i class="glyphicon glyphicon-plus"></i> Добавить</button>
        </div>
        {{ Form::close() }}
    </div>
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ответы на вопрос 2
shindakioku
@shindakioku
Не сайтоклепатор
Валидация
У Вас в foreach'e есть такие переменные:
$fileNameOriginal[] = ...
$fileName200[] = ....
Не особо понятно зачем []

Насчет проблемы: у Вас не загружаются картинки при выборе их из директории или же, вы выбираете 3 картинки, они загружаются, но в $request->file('preview_news') только две?
Ответ написан
dima9595
@dima9595 Автор вопроса
Junior PHP
в $fileName... записываются "сгенерированные" названия файлов из всех загруженных, которые далее заносятся в БД в виде json. А "[]" я делал что бы создавался массив и в них вписывались данные. Вроде есть лучший способ, но я старый школой учился)
На счёт картинок. Выбирал, допустим 3 картинки, а сохранялось в нужную директорию только 2, а где-то и 1. В $request все картинки показываются, получается не корректно работает сохранение картинок.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы