Apache Tika - 仅解析和提取元数据而不读取内容

问题描述 投票:0回答:1

有没有办法配置 Apache Tikka,使其仅从文件中提取元数据属性,而不访问文件的内容。 ?我们需要一种方法来做到这一点,以避免读取较大文件中的全部内容。

我们使用的提取代码如下:

        var tikaConfig = TikaConfig.getDefaultConfig();
        var metadata = new Metadata();

        AutoDetectParser parser = new AutoDetectParser(tikaConfig);
        BodyContentHandler handler = new BodyContentHandler();

        using (TikaInputStream stream = TikaInputStream.get(new    File(filename), metadata))
        {
            parser.parse(stream, handler, metadata, new ParseContext());

            Array metadataKeys = metadata.names();
            Array.Sort(metadataKeys);
        }

通过上面的代码示例,当我们尝试提取元数据时,即使内容正在被读取。我们需要一种方法来避免同样的情况。

metadata apache-tika
1个回答
0
投票

这不是最好的解决方案,但我发现当解析一个

BodyContentHandler
限制非常小的文档时,它会停止读取内容,但仍然会获取元数据。

这适用于 Tika 3.0.0(截至 2024 年 11 月 6 日)。

    public void parse(MultipartFile file) {
        Metadata metadata = new Metadata();
        try (InputStream inputStream =  file.getInputStream()){
            BodyContentHandler handler = new BodyContentHandler(1);
            ParseContext pcontext = new ParseContext();

            AutoDetectParser epubParser = new AutoDetectParser();
            epubParser.parse(inputStream, handler, metadata, pcontext);
        } catch (IOException | TikaException | SAXException e) {
           // empty on purpose
        }

        for (String name : metadata.names()) {
            System.out.println(name + ": " + metadata.get(name));
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.