laravel5.5で、音声ファイルだけファイルアップロード出来るようにしたい!

laravel5.5で、音声ファイルだけファイルアップロード出来るようにしたい!

ポッドキャストみたいに、音声配信・共有がメインのWebサービスの場合、音声ファイルだけアップロード出来るように制限したい。
laravelのバリデーションでは、画像制限くらいしか無い
image=フィールドで指定されたファイルが画像(jpg、png、bmp、gif、svg)であることをバリデートします。

なので、MIMEで制限するのが良いかと思ったけど、音声フォーマットで大量にあるのね…。
MIMEタイプと対応する拡張子の完全なリストは、pacheの公式HPで確認できます。

mimesで制限しようかと思ったけど、mimetypesの方がaudio/*みたいにワイルドカードが使えて便利!
あとドコモ系スマホだと、video/3gppなんかを音声ファイルとして送ってくるので、それも追加。

そもそもMIME(multipurpose Internet mail extensions)って何?って話だけど、大昔のメールは英数字テキストしか送れなかったが、2バイト文字や画像とかバイナリファイルも添付したい!というのでメールの仕様を拡張。
text/plain
image/png

みたいに、大分類/小分類みたいな構造になっていて、そのファイルの種類を教えてくれるためのものです。
laravelはブラウザから送ってきた物は使わずに、サーバ側でファイルからMIMEを導くので、MIME偽装にも対応できる。拡張子を変更しても正しく判定します。

ちなみに、バリデーション・メッセージを上書きしないと、以下のようにアップロード可能なMIMEを表示する(一般人には意味不明なメッセージ!)
アップロードファイルはaudio/*, video/3gpp, video/3gpp2タイプのファイルにしてください。