цикл добавления переменных в базу данных с помощью laravel php - PullRequest
0 голосов
/ 30 мая 2018

По какой-то причине мой скрипт возвращает noimage.jpg, и изображение не сохраняется.Не слишком уверен, почему?Он создает правильное имя файла, но, кажется, не соответствует двум терминам по какой-то причине?например, он создает 'image1', но когда поле 'image1' заполнено, он не видит их соответствующих?

Пользователь загружает фотографии:

   <div class="section4 ">
        <div class="row">
            <div class="col-lg-3">
                <div class="form-group">
                    {{Form::file('image1.jpg')}}
                </div>
                <div class="form-group">
                    {{Form::file('image2')}}
                </div>
                <div class="form-group">
                    {{Form::file('image3')}}
                </div>
                <div class="form-group">
                    {{Form::file('image4')}}
                </div>
            </div>

        </div>
        </div>

Контроллер:

for($i=1; $i<=16; $i++){
        $filenamestr = (string)('image'.$i);
        if($request->hasFile($filenamestr)){
            // Get filename with the extension
            $filenameWithExt = $request->file('image'.$i)->getClientOriginalName();
            // Get just filename
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            // Get just ext
            $extension = $request->file('image'.$i)->getClientOriginalExtension();
            // Filename to store
            $fileNameToStore= $filename.'_'.time().'.'.$extension;
            // Upload Image
            $path = $request->file('image'.$i)->storeAs('public/cover_images', $fileNameToStore);
        } else {
            $fileNameToStore = 'noimage.jpg';
        }
    }

1 Ответ

0 голосов
/ 30 мая 2018

Конечное значение $fileNameToStore устанавливается на 16-ю итерацию цикла, равную noimage.jpg.Тем не менее, похоже, что ваши изображения должны быть сохранены, если они присутствуют.

Вы можете решить первую проблему, создав массив имен файлов для хранения:

for($i=1; $i<=16; $i++){
    $filenamestr = (string)('image'.$i);
    if($request->hasFile($filenamestr)){
        // Get filename with the extension
        $filenameWithExt = $request->file('image'.$i)->getClientOriginalName();
        // Get just filename
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        // Get just ext
        $extension = $request->file('image'.$i)->getClientOriginalExtension();
        // Filename to store
        $fileNameToStore[$i]= $filename.'_'.time().'.'.$extension;
        // Upload Image
        $path = $request->file('image'.$i)->storeAs('public/cover_images', $fileNameToStore[$i]);
    } else {
        $fileNameToStore[$i] = 'noimage.jpg';
    }
}

dd($fileNameToStore);

Для второй проблемы, не забудьте проверить, что в вашей форме установлено <form enctype="multipart/form-data"....Также проверьте, что у сервера есть доступ на запись в вашу папку cover_images.

Также проверьте имя вашего первого ввода, так как в конце не должно быть .jpg.

Наконец,рассмотрите возможность использования $request->file('image'.$i)->isValid() перед сохранением, чтобы убедиться, что файл действителен.

Наконец

Рассмотрите возможность использования ввода массива, а не пронумерованных полей.Т.е. вызывайте каждое поле {{Form::file('image[]')}} и используйте поддержку Laravel dot нотации или foreach($request)->file()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...