Java io: InputStream, чтобы заархивировать файл вместо его встроенных файлов - PullRequest
0 голосов
/ 24 августа 2018

Это мой связанный фрагмент кода:

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>

но результат тот же.

1 Ответ

0 голосов
/ 24 августа 2018

Ваш код Apache Tika использует DefaultDetector, который по умолчанию может вызывать ZipContainerDetector, если он доступен. Если вы не хотите проверять ZIP-файлы на предмет их типа носителя, удалите ZipContainerDetector из вашей конфигурации.

Files.newInputStream() возвращает входной поток из файла, ничего более. Он не ведет себя по-разному в зависимости от типа файла или расширения.

...