java - Java io:InputStream 到 zip 文件而不是它的嵌入文件
问题描述
这是我的相关代码片段:
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>
但结果是一样的。
解决方案
您的 Apache Tika 代码使用DefaultDetector
默认情况下可以调用( ZipContainerDetector
如果可用)。如果您不想探测 ZIP 文件的内容媒体类型ZipContainerDetector
,请从您的配置中删除。
Files.newInputStream()
从文件返回输入流,仅此而已。它不会因文件类型或扩展名而有所不同。
推荐阅读
- angular - 当我运行我的角度程序时,无法在网络浏览器上看到网页/输出
- c++ - 从cpp动态加载和卸载2个qml文件
- go - 尝试发出回显请求时出现无效连接错误
- java - 为什么我在创建文件时收到运行时错误?
- html - 无论定位或索引编号如何,z-index 都不会改变
- css - 为什么 css 规则不应用于注入 html 的 dom 清理的角度字符串?
- linkedin - Linkedin oauth2 PKCE 内部服务器错误
- r - 在 R 中使用 if else 条件创建新变量
- r - 如何根据我的 r 数据框中的一个观察结果排除整行?
- javascript - .change jQuery 不改变数据