如何从字节[]中提取Mime类型

时间:2009-12-16 15:22:25

标签: java file mime-types magic-numbers

我有一个可用于上传文件的网页 现在我需要检查文件类型是否正确(zip,jpg,pdf,...)。

我可以使用请求附带的mimeType但我不信任用户,让我们说我想确保没有人能够上传以.jpg重命名的.gif文件 我认为在这种情况下我应该检查magic number This是一个我发现的java库,它似乎实现了我需要的'从幻数中提取mimetype'。
这是一个正确的解决方案还是你的建议?

更新 我找到了mime-util project,它似乎非常好并且是最新的! (也许比Java Mime Magic Library更好?)
Here is a list可帮助您提取mime类型的实用程序项目

3 个答案:

答案 0 :(得分:23)

尝试Java Mime Magic Library

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

答案 1 :(得分:10)

我确信@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”代表“未知”(西班牙文)

答案 2 :(得分:-2)

激活框架为Sun's answer to this。您可能已经在应用服务器的类路径中使用了这个

相关问题