Java io:将InputStream转换为zip文件而不是其嵌入式文件

时间:2018-08-24 08:09:46

标签: java java-io

这是我的相关代码段:

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 :(得分:1)

您的Apache Tika代码使用DefaultDetector,默认情况下可以调用ZipContainerDetector(如果有)。如果您不想探查ZIP文件的内容媒体类型,请从您的配置中删除ZipContainerDetector

Files.newInputStream()从文件返回输入流,仅此而已。根据文件类型或扩展名,它的行为没有不同。