首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tika检索错误的mimetype (application/x-tika-ooxml)

使用tika检索错误的mimetype (application/x-tika-ooxml)
EN

Stack Overflow用户
提问于 2021-11-29 17:40:48
回答 1查看 153关注 0票数 0

对于docx文件,我检索application/x-tika-ooxml,但我应该检索application/vnd.openxmlformats-officedocument.wordprocessingml.document

下面是我的方法:

代码语言:javascript
复制
public String retrieveMimeType(InputStream stream) throws IOException, TikaException {
        TikaInputStream tikaStream = null;
        TikaConfig tikaConfig = new TikaConfig();
        MediaType mediaType = null;

        try {
            mediaType = tikaConfig.getDetector().detect(TikaInputStream.get(stream), new Metadata());
        } catch (Throwable t) {
            throw t;
        } finally {
            if (tikaStream != null) {
                try {
                    tikaStream.close(); 
                } catch (IOException e) {
                }
            }
        }
        return mediaType.toString();
    }

和我的依赖:

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.27</version>
</dependency>

我使用tika-core和tika解析器来检索正确的mimetype,但它仍然给我带来了糟糕的mimetype……

EN

回答 1

Stack Overflow用户

发布于 2021-11-29 19:33:56

更新你的tika模块。tika-core的版本和它的模块应该总是相同的。

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>2.1.0</version>
</dependency>

新的微软文档格式(docxxlsx等)只是从外面看的zip档案。较早的tika版本默认情况下不会检查它们,这就是为什么根据版本不同,它们会将它们检测为application/zipapplication/x-tika-ooxml。您可以阅读有关此here的更多信息。

但是,分析归档可能会导致性能下降。为了防止出现这种情况,您可以根据您的用例来确定mime类型(见下文),或者使用现有的mime类型,如Content-Type header

代码语言:javascript
复制
final Metadata metadata = new Metadata();
metadata.add(TikaCoreProperties.RESOURCE_NAME_KEY, fileName);
detector.detect(stream, metadata);

在超文本传输协议请求中,文件名也可能在Content-Disposition header中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70158982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档