如何检查文件内容是否真实图像



为了根据文件内容(而不是扩展名)检测真正的文件类型,我使用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

这是真的,因为我更改了文件扩展名。
现在我要检查文件是否为image。
我在MediaType类中找不到enum。
现在我只知道以下方法:

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

但是这段代码看起来很丑。
你能提出更好的解决办法吗?

您将看到MediaType具有getType()getSubtype()方法。您要查找的是类型(即。"image/*")。子类型在本例中是"jpeg"

所以你的测试应该是:

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

如果文件是真正的gif, png或任何文件,那么唯一可靠的检查方法是检查这些文件中每个文件具有的独特的"魔术"字节序列。

如果你正在使用Java 7,你可以去这里的解决方案:https://odoepner.wordpress.com/2013/07/29/transparently-improve-java-7-mime-type-recognition-with-apache-tika/

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

最新更新