- PR -

拡張子以外でファイルのタイプを判別するには?

1
投稿者投稿内容
ヒロシマケン
会議室デビュー日: 2005/05/13
投稿数: 10
投稿日時: 2005-05-13 16:03
ファイルのアップロードをしようと思いますが、拡張子以外でファイルのMIMEを調べる方法を探しています。

アップロードはorg.apache.commons.fileuploadのAPIを使用しています。このパッケージ内のクラスで出来れば嬉しいのですが、Docを見渡したんですけど自分では見つけることができませんでした。

方法はなんでもよいので、返信お願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-05-13 17:11
リクエストヘッダにコンテントタイプが記載されていないでしょうか?


データそのものを見て判別するのは難しいかと思います。
たとえば CSV/HTML/XML 等のファイルは text/plain との区別ができないですよね。
ヒロシマケン
会議室デビュー日: 2005/05/13
投稿数: 10
投稿日時: 2005-05-13 17:22
返信ありがとうございます。とりあえずJAFでやることにしました。

http://java.sun.com/products/javabeans/glasgow/jaf.html

import javax.activation.MimetypesFileTypeMap;
import java.io.File;

class GetMimeType {
public static void main(String [] args) {
File file = new File("hoge.jpeg");
System.out.println(new MimetypesFileTypeMap().getContentType(file));

}
}

このパッケージを導入すれば二行で出来て手っ取り早いです。コアパッケージでやりたかったのですが・・・。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-05-13 17:43
おぉ、すばらしい。
簡単に利用できるAPIで良いですね。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-05-13 20:04
ヒロシマケンさんの方法だと、拡張子で判断しているっぽいです。
試しに、gifファイルをjpegに拡張子を変更したら、
image/jpegで帰ってきました。
他の拡張子でも試しましたが、恐らく拡張子で判断しています。

そのマッピング情報を保持しているのが、
activation.jar/META-INF/mimetypes.defaultだと思います。

ちなみに以前使った事があるのですが、
java.net.URLConnection#guessContentTypeFromStream(java.io.InputStream)
というのが使えると思います。
ソースを参照されるとわかると思いますが、ファイルヘッダを直接参照しています。

ただし、対応しているファイルタイプが少ないので、
がっかりするかもしれません。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-05-14 01:32
WINEX32.DLL というライブラリでは中身を少し読み込んで判別しているようですね。
http://www.55555.to/
JNI で Java からでも使えませんかね。
1

スキルアップ/キャリアアップ(JOB@IT)