アップロードしたファイルの種類を取得する方法として、以下の3つほどあげられるかと思います。
- ファイルの拡張子から取得
- ファイルのContentTypeから取得(ブラウザによって付与される情報)
- ファイル本体のヘッダーから取得
今回は3つ目のファイル本体のヘッダーから取得する方法
URLConnection.guessContentTypeFromStreamを使う方法
InputStream is = new BufferedInputStream(new FileInputStream(file)); return URLConnection.guessContentTypeFromStream(is);
mime-utilを使う方法
MimeUtil .registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); Collection<?> mimeTypes = MimeUtil.getMimeTypes(file); if (!mimeTypes.isEmpty()) { Iterator<?> iterator = mimeTypes.iterator(); MimeType mimeType = (MimeType) iterator.next(); return mimeType.getMediaType() + "/" + mimeType.getSubType(); } return "application/octet-stream";
それぞれの判定の精度
URLConnection.guessContentTypeFromStream
- pdf:null
- ppt:null
- xls:null
- jpg:image/jpeg
- png:image/png
- gif:image/gif
- txt:null
- mov:null
- mp4:null
- mpg:null
mime-util
- pdf:application/pdf
- ppt:application/msword
- xls:application/msword
- jpg:image/jpeg
- png:image/png
- gif:image/gif
- txt:application/octet-stream
- mov:video/quicktime
- mp4:video/mp4
- mpg:video/mp2p
どうやらmime-utilの方が精度が良いようです。