有没有办法配置 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);
}
通过上面的代码示例,当我们尝试提取元数据时,即使内容正在被读取。我们需要一种方法来避免同样的情况。
这不是最好的解决方案,但我发现当解析一个
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));
}
}