2014-03-06 2 views
3

나는 표준 혼자 자바 배치 프로세스를 개발 중이다. Tika Jars를 사용하여 첨부 파일 mimetype을 확인하려고합니다. Tika 1.4 Jar 파일을 사용하고 있습니다.Tika jars를 사용하여 Mimetype 검사

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); 

이 코드와 같은

내 코드보기는 사무실 03 및 07 문서를 제대로 작동하지 않습니다.

일식에서 실행하는 동안 올바른 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"이면 배치 프로세스가 죽어 가고 있습니다 (코드에서 "exit (0);"와 같이). 새로운 tika 항아리가 있으면 mimeTypes가 잘못되었습니다.

도와주세요. 미리 감사드립니다.

CVSR Sarma

답변

3

첫째, 아파치 티카의 잘못된 비트를 사용하고 있습니다.

당신이 당신의 클래스 패스만을 tika-core 병이있는 경우
TikaConfig tika = new TikaConfig(); 

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

, 다음 검출 위에서 사용 마임 매직 : 당신이 알고 싶은 모든 파일 형식 인 경우에, 당신은 Detection API (javadocs) 직접, 예를 사용해야합니다 및 파일 이름 힌트. 그렇게하면 대부분의 파일을 얻을 수 있습니다. 특히 올바른 확장자가있는 경우에는 "컨테이너 형식"이라는 잘못된 이름으로 고생하게됩니다.

컨테이너 형식은 zip, ole2 등입니다. 유형 (예 : ods, xlsx, 기조 연설 모두 .zip, .doc 및 .xls는 모두 ole2를 사용합니다). 더 정확한 결과를 얻기 위해 컨테이너 내부를 검색하는 경우에는 tika-parser jar 및 해당 종속성도 포함시켜야합니다.

explained in the Javadocs으로, 스트림이 검색을 작동 시키려면 마크 및 리셋을 지원해야합니다. 이것은 Tika가 스트림의 첫 번째 비트를 읽을 수 있도록하고, 파일이 무엇인지 알아 낸 다음 스트림을 다른 용도 (예 : 구문 분석)에 대한 준비 상태로 되돌립니다. 대부분의 스트림은 그래야하지만 가장 간단한 방법은 수정하지 않고 가장 가까운 방법은 TikaInputStream.get을 통해 TikaInputStream에 넣는 것입니다.

+0

@ Gagravarr tika.getDetector(). detect (stream, metadata); Mediatype을 반환합니다. 나는 그것을 시도했다. 그것의 작동하지 않습니다. –

+0

표시된대로 파일 이름을 전달했는지 확인하십시오. 정확한 결과를 원하면 클래스 패스에 tika-parser jar + 의존성을 포함 시켰는지 확인하십시오. 정확히 대답이 ... – Gagravarr

+0

Eclipse에서 작동합니다. jar 파일을 만들고 명령 프롬프트에서 실행하면 작동하지 않습니다. maven을 사용하여 항아리와 종속성을 다운로드했으며 클래스 경로에 모든 jar 파일을 포함했습니다. @Gagravarr –