基于FileName检测内容类型

时间:2014-03-06 19:42:01

标签: java apache-tika

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

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

感谢。

2 个答案:

答案 0 :(得分:4)

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

您的代码看起来像:

TikaConfig config = new TikaConfig();

Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, filename);
String mimetype = config.getDetector().detect(null, metadata);

为了简化事情,如果你使用Tika facade class,你可以这样做:

Tika tika = new Tika();

String mimetype = tika.detect(filename);

你会回来the mimetype guessed from the filename only

有关详细信息,请参阅Apache Tika网站上的"Ways of triggering Detection"文档。

答案 1 :(得分:2)

我做了一些搜索,发现了一个blog post,其中包含一个使用org.apache.tika.Tika类检测方法确定类型的代码示例。

所以我可以这样写:

org.apache.tika.Tika tika = new org.apache.tika.Tika();
String mimeType = tika.detect("abc.pdf"); // replace abc.pdf with a string variable