Это мой связанный фрагмент кода:
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>
но результат тот же.