根据文件名检测内容类型

Dav*_*vid 2 java apache-tika

我正在尝试使用 Apache Tika 来确定内容类型(即 - .pdf 文件的 application/pdf)。我想使用 Apache Tika 的 org.apache.tika.detect.NameDetector 类。我的问题是它的检测方法只接受一个 InputStream。我无权访问文件的 InputStream。我只有文件名(即 - myFile.pdf)。

有没有什么好方法可以使用 Apache Tika 仅根据文件的扩展名/名称来确定内容类型?(注意 - 我想避免创建一个具有所需名称的临时文件来确定它的内容类型。)

谢谢。

Gag*_*arr 6

您可以使用为 InputStream传入的普通Apache Tika Detector 接口null,并提供文件名。

您的代码如下所示:

TikaConfig config = new TikaConfig();

Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, filename);
String mimetype = config.getDetector().detect(null, metadata);
Run Code Online (Sandbox Code Playgroud)

为了进一步简化事情,如果您使用Tika 门面类,您可以这样做:

Tika tika = new Tika();

String mimetype = tika.detect(filename);
Run Code Online (Sandbox Code Playgroud)

并且您只会返回仅从文件名中猜测的 mimetype

有关更多信息,请参阅Apache Tika 网站上的“触发检测方式”文档。