Laravel продолжает отклонять аудиоформат m4a, как это исправить?

На всю жизнь я просто не могу понять, как разрешить аудиофайлу m4a проходить через проверку laravel

$this->validate($request,[
    'audio' => 'required|mimes:mpga,mp3,mp4a,aac,m4a'
]);

Файлы mp3, mpeg могут быть успешно загружены, но продолжайте отклонять m4a.

Кто-нибудь знает, какой тип пантомимы мне следует включить?

Для ясности, я ищу расширение для предположений Audio / x-m4a. Все это (m4a, mp4a, mp4, aac), похоже, не работает.

Спасибо


person stanley1943    schedule 16.03.2016    source источник
comment
Возможно, этот вопрос может быть полезен: stackoverflow.com/questions/29455311/validate -an-audio-file   -  person Adrenaxus    schedule 16.03.2016
comment
Я проверил, ответ не содержит m4a   -  person stanley1943    schedule 16.03.2016
comment
Вы когда-нибудь находили на это ответ? Я застрял с аналогичной проблемой .m4a, когда я делаю finfo_open(FILEINFO_MIME_TYPE) в файле, я получаю audio/x-m4a в результате, но когда я добавляю audio/x-m4a' в список Validator mimes, он все равно терпит неудачу !!!!   -  person Summer Developer    schedule 12.09.2017
comment
Да, это действительно раздражает. Думаю, я просто проверил тип mime для m4a через finfo () отдельно, расширив средство проверки mimes. Если вы покопаетесь в поддерживаемом списке Symfony для аудиофайла, m4a никогда не поддерживался как аудио. Это даже не вина Laravel ....   -  person stanley1943    schedule 12.09.2017
comment
К вашему сведению, если вам нужно узнать конкретную поддержку для приложений / аудио / видео / и т. Д. MimeTypeExtensionGuesser.php из Symfony, от которого расширяется Laravel, будет хорошим началом для изучения.   -  person stanley1943    schedule 12.09.2017


Ответы (2)


Для Laravel 5.4 попробуйте следующее: измените mimes на mimetypes и используйте audio/x-m4a вместо m4a.

person abelhoang    schedule 13.07.2018

Если вы dd наберете MIME-тип файла, например $this->file('contract_copy')->guessExtension();, он вернет что-то "mp4a" для m4a расширения.

Поэтому я думаю, вам нужно расширение mp4a при проверке вместо m4a, например,

$this->validate($request,[
    'audio' => 'required|mimes:mpga,mp3,mp4a,aac,mp4a'
]);

Подробнее: проверьте файл класса валидатора в vendor\laravel\framework\src\Illuminate\Validation\Validator.php, там вы можете увидеть, как laravel выполняет проверку на соответствие mime-типам.

protected function validateMimes($attribute, $value, $parameters)
{
    if (! $this->isAValidFileInstance($value)) {
        return false;
    }

    return $value->getPath() != '' && in_array($value->guessExtension(), $parameters);
}
person Kalhan.Toress    schedule 16.03.2016
comment
Если я выполняю finfo_file () для файла m4a, он показывает расширение m4a. Я действительно вставил mp4a как часть моего вопроса и m4a и то и другое. Я немного поспал, и мне интересно, если это файл быстрого времени m4a. Тем не менее, я поставил AAC как m4a. Я даже дошел до mp4, чтобы убедиться. - person stanley1943; 16.03.2016
comment
audio / x-m4a, если быть точным - person stanley1943; 16.03.2016
comment
У вас есть лучший ответ на это? Как упоминалось в OP, он уже включил mp4a в свой Validator, я тоже был и не могу придумать ответа. - person Summer Developer; 12.09.2017