26

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

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

更新: 我找到了mime-util 项目,它看起来非常好而且是最新的!(也许比 Java Mime Magic Library 更好?)
这是一个实用项目列表,可以帮助您提取 mime 类型

4

3 回答 3

24

试试Java Mime 魔法库

byte[] data = ...
MagicMatch match = Magic.getMagicMatch(data);
String mimeType = match.getMimeType();
于 2009-12-16T15:25:53.677 回答
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”代表“未知”(西班牙语)

于 2009-12-16T15:33:09.980 回答
-2

激活框架是Sun 对此的回答。而且您很可能已经在应用服务器的类路径中拥有它

于 2009-12-16T15:31:57.077 回答