Я пытаюсь проверить размер файла и тип mime загруженного файла (mp3-файл) в laravel. Но проверка, похоже, только начинается, когда я загружаю изображение (gif, png). Когда я загружаю файл mkv размером 100 Мб, проверка, похоже, в порядке с ним. Вот мой текущий код:
$file = Input::file('audio_file'); $file_rules = array('audio_file' => 'size:5242880|mimes:mp3'); //also tried mpeg $file_validator = Validator::make(Input::file(), $file_rules); if($file_validator->fails()){ //return validation errors }else{ //always goes here and succeeds }
Любые идеи, что не так с моим кодом? Заранее спасибо!
Попробуйте изменить строку правил файла, чтобы:
$file_rules = array('audio_file' => 'size:5242880|mimes:audio/mpeg,audio/mp3,audio/mpeg3');
В соответствии с этим , «audio / mpeg» является правильным MIME-типом для mp3-файлов (некоторые браузеры также используют «audio / mpeg3» или «audio / mp3»).
Если это не сработает, вы можете получить тип MIME перед проверкой:
$file = Input::file('audio_file'); $mimeType = $file->getMimeType(); $supportedTypes = ['audio/mpeg', 'audio/mpeg3', 'audio/mp3']; if (in_array($mimeType, $supportedTypes)) { // validate or simply check the file size here } else { // do some other stuff }
Выбранный ответ не работает: $file->getMimeType()
возвращает непредсказуемые результаты. Файлы типа .css
, .js
, .po
, .xls
и многое другое получают text/plain
тип mime. Поэтому я разместил свое решение там https://stackoverflow.com/a/26299430/1331510