当前位置: 首页 > 知识库问答 >
问题:

使用Tika jars进行Mimetype检查

周兴朝
2023-03-14

我正在开发标准的Java批处理。我正在尝试使用Tika Jars确定文件附件mimetype。我正在使用Tika 1.4 Jar文件。

我的代码看起来像

Parser parser= new AutoDetectParser();
InputStream stream = new FileInputStream(fileAttachment);
int writerHandler =-1;
ContentHandler contentHandler= new BodyContentHandler(writerHandler);
Metadata metadata= new Metadata();
parser.parse(stream, contentHandler, metadata, new ParseContext());
String mimeType = metadata.get(Metadata.CONTENT_TYPE);
logger.debug("File Attachment: "+fileattachment.getName()+" MimeType is: "+mimeType);

此代码无法正常用于office 03和07文档。

从eclipse运行时,我得到了正确的mimetype。

我构建jar文件并从命令运行,它给出了错误的mimetype。

out put from command
------------
File Attachment: Testpdf.pdf  MimeType is: application/pdf
File Attachment: Testpdf.tif  MimeType is: image/tiff
File Attachment: Testpdf.xlsx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.xltx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.pptx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.docx  MimeType is: application/x-tika-ooxml
File Attachment: Testpdf.xls  MimeType is: application/zip
File Attachment: Testpdf.doc  MimeType is: application/x-tika-msoffice
File Attachment: Testpdf.dot  MimeType is: application/x-tika-msoffice
File Attachment: Testpdf.ppt  MimeType is: application/x-tika-msoffice
File Attachment: Testpdf.xlt  MimeType is: application/vnd.ms-excel

我尝试了officePraser、OOXMLParser。它不起作用。我尝试了tika 0.9 jar文件。mimeTypes正确,但如果我的任何一个文件附件是“可编辑pdf”,我的批处理就会死亡(如代码中的“退出(0);”)。如果我有新的tika jar,它会给出错误的mimeTypes。

请帮帮我。提前谢谢。

CVSR萨尔玛

共有1个答案

国俊艾
2023-03-14

首先,您使用了错误的Apache Tika。如果您只想知道文件类型,那么您应该直接使用检测API(javadocs),例如:

TikaConfig tika = new TikaConfig();

Metadata metadata = new Metadata();
metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY, filename);
String mimetype = tika.getDetector().detect(stream, metadata);

如果您的类路径上只有tika-corejar,那么上面的检测将使用Mime Magic和Filename提示。这将使它获得大多数文件,尤其是如果它们具有正确的扩展名,但它只会努力命名错误的“容器格式”

容器格式是zip、ole2等,其中一种文件格式可以容纳多种类型(例如ods、xlsx、keynote all use.zip、.doc和.xls都使用ole2)。如果要在容器内进行检测以获得更准确的结果,还需要包括tika解析器标准及其依赖项。

请注意,正如Javadocs中所解释的,您的流需要支持标记和重置,以便检测工作。这样Tika就可以读取流的第一位,查看它以确定文件是什么,然后将流返回到其他用途(例如解析)的状态。大多数流都应该这样做,但如果您的流没有这样做,最简单的修复方法就是通过TikaInputStream将其包装在TikaInputStream中。得到,这会帮你解决所有问题

 类似资料:
  • 我有疑问。我写了一个流类型检查器来检查我的减速器。有一个错误,你能给我解释一下错误的原因吗。这是我的密码。 这是错误。 错误------------------------------------------------------------------------------------------------------------------------------------------

  • 我对战备探测很困惑。假设我使用httpGet和/health作为探测endpoint。一旦就绪检查返回500,服务器将停止服务流量。那么/healthendpoint如何工作呢?换句话说,一旦准备状态检查失败,它怎么能再工作,因为它不再能够对未来/健康检查做出响应? 我想一个有效的解释是路径是在本地调用的?(即不通过HTTPS:${ip and port}/health)

  • 主要内容:分配矩阵,请求矩阵如果在资源分配图中形成一个循环,其中所有资源都有单个实例,则系统将死锁。 在具有多实例资源类型的资源分配图的情况下,周期是死锁的必要条件,但不是充分条件。 以下示例包含三个进程P1,P2,P3和三个资源R2,R2,R3。 所有资源都有单个实例。 如果我们分析图表,那么我们可以发现图表中存在一个循环,因为系统满足所有四种死锁条件。 分配矩阵 分配矩阵可以通过使用系统的资源分配图来形成。 在分配矩阵中

  • 问题内容: 我想使用OpenCV 2.4.1软件包随附的Tutorial 2-Basic作为起点,使用Android版OpenCV检测椭圆。请注意,我的椭圆将是一个完美的photoshop之一。 据我了解,使用“ HoughCircles”只会找到完美的(或大约)圆,因此省略了椭圆。 任何帮助将不胜感激,因为我是OpenCV的初学者 到目前为止,这是我尝试过的 如果您认为更多信息可能有用,请告诉我

  • 我试图用BFS算法在有向图中检测循环。我检测周期的主要想法是:由于BFS只访问每个节点(和边缘)一次,如果我再次遇到已访问的节点;它会导致一个循环。然而,我的代码有时会找到循环,有时不会。 我从维基百科修改的伪代码如下: 我错过了什么?

  • 我正在试用OpenNLP句子检测工具。文本在一个文件-para3中。txt。内容: 我使用以下命令运行此命令: 我得到如下输出: 理想情况下,我会看到三句话作为输出: 现在,如果我尝试其他句子,其中“句号”或“句号”出现,句子检测就会发生。一个人可能会猜到文本中有3个句子,但是如何通过OpenNLP完成呢?NLP的哪些工具可以在这里提供帮助???句子检测的下一个层次是什么?