mime type validation в laravel 4 не работает

Я пытаюсь проверить размер файла и тип 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