【问题标题】:HowTo extract MimeType from a byte[] [duplicate]如何从字节中提取 Mime 类型 [] [重复]
【发布时间】:2010-12-27 06:48:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: java file mime-types magic-numbers


    【解决方案1】:

    试试Java Mime Magic Library

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

    【讨论】:

    • 它没有正确检测 docx 文件.. 它一直将 application/zip 作为 mimetype...
    • @OscarPérez docx 确实是一个包含一堆 XML 文件的 zip 存档,所以它在技术上是正确的。您可以自己检查存档,看看它是否是 docx 或类似文件。这可能超出了这个小型库的范围。
    • @sfussenegger 你对这个 SO 问题有什么看法check file of MIME-type with JMimeMagic
    【解决方案2】:

    激活框架是Sun's answer to this。你很可能已经在你的应用服务器的类路径中拥有它

    【讨论】:

    • 我在一些 .pdf、.xls 文件上尝试了激活框架的 getContentType(),但不幸的是,该方法总是返回“application/octet-stream”。仅适用于 .txt 提供类似 'text/plain'
    • 实际上 getContentType 仅根据文件扩展名和您提供的 mimeType 映射映射文件...这不是我要找的
    • 我同意,这不是你要找的!
    • 链接到 IP 地址很奇怪。
    【解决方案3】:

    我确信@sfussenegger 发布的库是最好的解决方案,但我使用以下sn-p 手动完成,希望对您有所帮助。

    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”代表“未知”(西班牙语)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2011-09-22
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多