Как сделать валидацию при загрузке файлов с различными расширениями: pdf, doc, docx, jpg, jpeg, png, ppt, txt, tif, xls, xlsx?

Прошу совета!

К товарам предусмотрена загрузка документации в файлах с различными расширениями: pdf, doc, docx, jpg, jpeg, png, ptt, txt, tif, xls, xlsx.

Проблема с валидацией файлов при загрузке.

Правило валидации: ‘file’=> 'mimes:jpg,gif' – для указанных типов расширений не подходит.

Валидация по mimetypes тоже не проходит. Например в контолере укзано правло валидации с допустимыми типами файлов:

$messages = [
            'file' => 'Файл документа должен иметь расширение: pdf,doc,docx,jpg,jpeg,png,ppt,txt,tif,xls,xlsx',
            'file.size' => 'Размер документа не должен превышать 10 мб.'
        ];
        $this->validate($request, [
            'file' => 'mimetypes:application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/jpeg,image/png,application/vnd.ms-powerpoint,text/plain,image/tiff,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet|nullable',
            'file.size' => '10248|nullable'
        ],$messages);

Не срабатывает, грузятся все файлы: видео - *.mp4, аудио - *.mp3, *.psd – которых нет в списке mimetypes.

Посоветуйте способ валидации при загрузке файлов с указанными расширениями. Буду признателен за любую информацию о способе решения задачи.
  • Вопрос задан
  • 768 просмотров
Решения вопроса 1
@Nc_Soft
'file' => 'mimetypes:application/pdf
заменить на
'file' => 'mimes:application/pdf
либо самому проверить, что гибче
<?php
$file = request()->file('file');
$ext = $file->getClientOriginalExtension();
$ext = strtolower($ext);
if (!in_array($ext, ['jpg', 'jpeg', 'png', 'gif'])) {
  return response()->json([
   'errors' => [
     'file' => 'INVALID_EXTENSION',
    ]
   ], 400);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы