Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从字节[]中提取MimeType_Java_File_Mime Types_Magic Numbers - Fatal编程技术网

Java 如何从字节[]中提取MimeType

Java 如何从字节[]中提取MimeType,java,file,mime-types,magic-numbers,Java,File,Mime Types,Magic Numbers,我有一个可以用来上传文件的网页。 现在我需要检查文件类型是否正确(zip、jpg、pdf等)。 我可以使用请求附带的mimeType,但我不信任用户,比如说,我想确保没有人能够上传在.jpg中重命名的.gif文件 我认为,在这种情况下,我应该检查机器。 是我发现的一个java库,它似乎实现了我所需要的“从幻数中提取mimetype”。 这是正确的解决方案还是你的建议 更新: 我已经找到了,它看起来非常好而且是最新的!(可能比Java Mime魔术库更好? 可以帮助您提取mime类型的实用程序项目

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

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

更新: 我已经找到了,它看起来非常好而且是最新的!(可能比Java Mime魔术库更好?
可以帮助您提取mime类型的实用程序项目的列表


激活框架是。你的应用程序服务器的类路径中可能已经有了这一点,我相信@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”(西班牙语)

我在一些.pdf、.xls文件上尝试了activation framework的getContentType(),但不幸的是,该方法总是返回“application/octet stream”。only for.txt提供了类似于“text/plain”的内容实际上getContentType只根据您提供的文件扩展名和mimeType映射文件。。。这不是我想要的我同意,那不是你想要的!链接到IP地址很奇怪。它无法正确检测docx文件。。它一直以mimetype的形式提供application/zip…@OscarPérez一个docx实际上是一个包含大量XML文件的zip存档,所以它在技术上是正确的。您可以自己检查归档文件,看看它是否是docx或类似文件。这可能超出了这个小图书馆的范围。@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 } });