mime-utilというライブラリを利用すると、拡張子等に関わらずファイルヘッダからMIMEタイプを判定してくれる。以下利用例。
MimeUtil.registerMimeDetector(
"eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
File file = new File("/Users/horimislime/Desktop/image.jpeg"); //ホントはpng
Collection<String> mimeTypes = MimeUtil.getMimeTypes(file);
mimeTypesには"image/png"が入る。1行目で指定しているクラスはMIMEタイプの判定器で、ここではファイルヘッダから形式を判定してくれるMagicMimeMimeDetectorを選択。他にも拡張子を元に判定を行うExtensionMimeDetector等いろいろあるけど、ここでは省略。
ローカルファイルだけでなく、Web上のファイルURLも直接指定できる。
URL myPicture =
new URL("https://si0.twimg.com/profile_images/2519939119/bk1_normal.png");
Collection<String> mimeTypes = MimeUtil.getMimeTypes(myPicture); // image/png
FileやURL以外にも、InputStreamやbyte配列も引数に渡せて使いやすい。