如何检查文件内容真正的图像

时间:2015-07-11 20:17:52

标签: java file-type apache-tika

要根据文件内容(而不是扩展名)检测真实文件类型,我使用apache Tika。

我写了以下代码:

    InputStream theInputStream = new FileInputStream("D:\\video.mp4");
    try (InputStream is = theInputStream;
            BufferedInputStream bis = new BufferedInputStream(is);) {
        AutoDetectParser parser = new AutoDetectParser();
        Detector detector = parser.getDetector();
        Metadata md = new Metadata();
        MediaType mediaType = detector.detect(bis, md);
        mediaType.getBaseType().compareTo(MediaType))
        System.out.println(mediaType);
    }

此代码输出image/jpeg

这是事实,因为我更改了文件扩展名 现在我想检查该文件是否是图像 我在MediaType类中找不到枚举。
现在我只知道以下方式:

mediaType.toString().startsWith("image");

但这段代码看起来很难看 你能建议更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

您会看到MediaTypegetType()getSubtype()方法。你要找的是类型(即"image/*")。在这种情况下,子类型将是"jpeg"

所以你的测试应该是:

if (mediaType.getType().equals("image")) {
   // Deal with image
}

答案 1 :(得分:-1)

如果文件是真正的gif,png或任何文件,你需要检查每个文件的唯一“魔术”字节序列,AFAIK是检查更可靠的唯一方法。

如果您使用的是Java 7,可以在此处找到此解决方案: https://odoepner.wordpress.com/2013/07/29/transparently-improve-java-7-mime-type-recognition-with-apache-tika/

我不是这个的作者,还没有测试过!