【发布时间】:2022-11-10 23:49:27
【问题描述】:
是否可以告诉 Tika 或解析器 ZIP 只能包含具有特定 MimeType 或文件扩展名的文件?
iam 当前使用的是递归解析器来获取每个文件的所有信息。
final ParseContext context = new ParseContext();
final ContentHandlerFactory contentHandlerFactory = new BasicContentHandlerFactory( BasicContentHandlerFactory.HANDLER_TYPE.TEXT, -1 );
final RecursiveParserWrapperHandler recursiveParserWrapperHandler = new RecursiveParserWrapperHandler( contentHandlerFactory );
final RecursiveParserWrapper parser = new RecursiveParserWrapper( autoDetectParser );
context.set( Parser.class, parser );
parser.parse( tikaInputStream, recursiveParserWrapperHandler, metadata, context );
我正在寻找一个 zip 只能包含一种文件类型并且不能包含任何其他 zip/容器的解决方案。目前我正在手动执行此操作,但也许有更好的解决方案。尤其是在拉链轰炸方面,另一种解决方案更有意义。
final String contentType = metadata1.get( Metadata.CONTENT_TYPE );
final MediaType mediaType = MediaType.parse( contentType );
final MediaType expectedMediaType = MediaType.text( "turtle" );
final String depth = metadata1.get( TikaCoreProperties.EMBEDDED_DEPTH );
if ( MediaType.APPLICATION_ZIP.equals( mediaType ) ) {
if ( Integer.parseInt( depth ) > 0 ) {
throw new RuntimeException( "Not allowed depth path" );
}
return;
}
if ( !expectedMediaType.equals( mediaType ) ) {
throw new RuntimeException( "Not allowed media type" );
}
【问题讨论】:
-
如果 Apache Tika 在 zip 中找到任何其他文档类型,您希望 Apache Tika 做什么?
-
@Gagravarr 添加了更多上下文
-
然后我会做一个自定义递归处理程序,如果它匹配允许的类型调用真正的解析器来完成工作,否则中止
标签: apache-tika