web-dev-qa-db-ja.com

バイトからMIMEタイプを抽出する方法[]

ファイルのアップロードに使用できるWebページがあります。
ファイルタイプが正しいかどうかを確認する必要があります(Zip、jpg、pdfなど)。

リクエストに付属のmimeTypeを使用できますが、ユーザーを信頼していないため、.jpgで名前が変更された.gifファイルを誰もアップロードできないようにしたいとします。
この場合、 マジックナンバー を調べる必要があると思います。
This is a Javaライブラリは、私が必要としていることを達成しているようです。
これは正しい解決策ですか、それとも何を提案しますか?

UPDATE:mime-util project を見つけましたが、とても良くて最新のようです! (多分それより良いJava Mime Magic Library?)
ここにリストがあります mimeタイプを抽出するのに役立つユーティリティプロジェクトの

25
mickthompson

試してください Java Mime Magic Library

byte[] data = ...
MagicMatch match = Magic.getMagicMatch(data);
String mimeType = match.getMimeType();
24
sfussenegger

@sfusseneggerによって投稿されたライブラリが最善の解決策であると確信していますが、次のスニペットを使用して手作業で行います。お役に立てば幸いです。

DESCONOCIDO("desconocido", new byte[][] {}), PDF("PDF",
            new byte[][] { { 0x25, 0x50, 0x44, 0x46 } }), JPG("JPG",
            new byte[][] { { (byte) 0xff, (byte) 0xd8, (byte) 0xff,
                    (byte) 0xe0 } }), RAR("RAR", new byte[][] { { 0x52,
            0x61, 0x72, 0x21 } }), GIF("GIF", new byte[][] { { 0x47, 0x49,
            0x46, 0x38 } }), PNG("PNG", new byte[][] { { (byte) 0x89, 0x50,
            0x4e, 0x47 } }), Zip("Zip", new byte[][] { { 0x50, 0x4b } }), TIFF(
            "TIFF", new byte[][] { { 0x49, 0x49 }, { 0x4D, 0x4D } }), BMP(
            "BMP", new byte[][] { { 0x42, 0x4d } });

よろしく。

PD:最高の点は、依存関係がないことです。 PD2:それが正しいかどうかについての保証はありません! PD3:「desconocido」は「unknown」(スペイン語)の略です

10
ATorras