import javax.activation.MimetypesFileTypeMap;
import java.io.File;
class Untitled {
public static void main(String[] args) {
String filepath = "/the/file/path/image.jpg";
File f = new File(filepath);
String mimetype= new MimetypesFileTypeMap().getContentType(f);
String type = mimetype.split("/")[0];
if(type.equals("image"))
System.out.println("It's an image");
else
System.out.println("It's NOT an image");
}
}
String pathname="abc\xyz.png"
File file=new File(pathname);
String mimetype = Files.probeContentType(file.toPath());
//mimetype should be something like "image/png"
if (mimetype != null && mimetype.split("/")[0].equals("image")) {
System.out.println("it is an image");
}
import javax.activation.MimetypesFileTypeMap;
File myFile;
String mimeType = new MimetypesFileTypeMap().getContentType( myFile ));
// mimeType should now be something like "image/png"
if(mimeType.substring(0,5).equalsIgnoreCase("image")){
// its an image
}
8条答案
按热度按时间flseospp1#
这对我来说很好。希望我能帮上忙
字符串
j2cgzkjk2#
字符串
答案:How to check a uploaded file whether it is a image or other file?
w8biq8rn3#
在Java 7中,有java.nio.file.Files.probeContentType()方法。在Windows上,它使用文件扩展名和注册表(它不会探测文件内容)。然后您可以检查MIME类型的第二部分,并检查它是否为
<X>/image
。iih3973s4#
你可以尝试这样的东西:
字符串
3duebb1j5#
其他答案建议将完整图像加载到内存中(
ImageIO.read
)或使用标准JDK方法(MimetypesFileTypeMap
和Files.probeContentType
)。如果不需要读取图像,并且您真正想要的是测试它是否是图像(并且可能要保存它的内容类型以在将来读取此图像时在
Content-Type
响应头中设置它),则第一种方法效率不高。测试JDK的方法通常只是测试文件扩展名,而不是真正给你给予你可以信任的结果。
我的工作方式是使用Apache Tika库。
字符串
类型检测是基于给定文档流的内容和文档的名称。仅从流中读取有限数量的字节。
我传递
fileExtension
只是作为Tika
的一个 * 提示 *。它没有它也能工作。但根据文档,它有助于在某些情况下更好地检测。ImageIO.read
相比,这种方法的主要优点是Tika
不会将整个文件读入内存-只读取第一个字节。MimetypesFileTypeMap
和Files.probeContentType
相比,Tika
的主要优点是Tika
真正读取文件的第一个字节,而JDK在当前实现中只检查文件扩展名。TLDR
ImageIO.read
from Krystian's answer。Content-Type
,那么使用Tika
(这个答案)。Files.probeContentType
。e0uiprwp6#
你可以尝试这样的东西:
字符串
这应该可以工作,尽管它似乎不是最优雅的版本。
dm7nw8vv7#
有很多方法可以做到这一点;请参阅其他答案和相关问题的链接(Java 7方法对我来说似乎最有吸引力,因为它默认使用特定于平台的约定,并且您可以提供自己的文件类型确定方案。
然而,我只想指出没有任何机制是绝对正确的:
63lcw9qa8#
下面是我的代码,基于使用tika的答案。
字符串