这是我的相关代码段:
for (Path path : Files.list(Paths.get(this.getClass().getClassLoader().getResource(directoryResource).getPath())).collect(Collectors.toList())) {
String mediaType = this.tikaService.getMimeType(Files.newInputStream(path));
assertEquals(Files.probeContentType(path), mediaType);
}
您可以发现,this.tikaService.getMimeType(...)
收到了我使用InputStream
提供的Files.newInputStream(path)
。
一切正常,除非path
指向一个zip文件。
在这种情况下,Files.newInputStream()
指向的是zip文件的内容(嵌入式文件),而不是指向的zip文件。
有没有解决的办法?
编辑
getMimeType
代码:
public String getMimeType(InputStream is) {
TikaConfig tikaConfig = TikaConfig.getDefaultConfig();
Detector detector = tikaConfig.getDetector(); //new DefaultDetector();
Metadata metadata = new Metadata();
MediaType mediaType = detector.detect(TikaInputStream.get(is), metadata);
}
编辑2
我也尝试使用以下配置文件禁用ZipContainerDetector
:
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<detectors>
<!-- All detectors except built-in container ones -->
<detector class="org.apache.tika.detect.DefaultDetector">
<dhttps://stackoverflow.com/posts/52000097/editetector-exclude class="org.apache.tika.parser.pkg.ZipContainerDetector"/>
</detector>
</detectors>
</properties>
但结果是相同的。
答案 0 :(得分:1)
您的Apache Tika代码使用DefaultDetector
,默认情况下可以调用ZipContainerDetector
(如果有)。如果您不想探查ZIP文件的内容媒体类型,请从您的配置中删除ZipContainerDetector
。
Files.newInputStream()
从文件返回输入流,仅此而已。根据文件类型或扩展名,它的行为没有不同。