2015-07-24 1 views
1

J'essaie de connaître le type de contenu d'un fichier en utilisant apache tika.Apache Tika detect renvoie un résultat incohérent

signifie alors que j'ai trouvé ce comportement incohérent.

final Tika tika = new Tika(); 

String fileType = tika.detect(uploadedInputStream); 
System.out.println(fileType); 
String newFileType = tika.detect(uploadedInputStream); 
System.out.println(newFileType); 

le code ci-dessus me donne eteint comme

application/pdf 
application/octet-stream 

J'attends la sortie comme application/pdf dans les deux cas.

Quelqu'un peut-il expliquer pourquoi cela se passe comme ça? comment puis-je obtenir le résultat escompté?

+1

Apache Tika a quelques exigences sur ce genre de InputStream il peut détecter sans changer l'état de celui-ci. Que se passe-t-il si vous essayez d'envelopper le vôtre dans un TikaInputStream? – Gagravarr

+0

Merci beaucoup, celui-ci m'a aidé. Pourriez-vous s'il vous plait me dire plus, pourquoi ça se passait avec InputStream normal et comment TikaInputStream l'a résolu – manoj

+2

Quand Tika a fini de détecter, il doit rembobiner le flux pour l'utilisateur suivant (par exemple une seconde détection). Si votre flux prétend prendre en charge le rembobinage mais pas réellement, alors ces octets sont partis et vous êtes bourré .... – Gagravarr

Répondre

0

Quand j'enveloppai InputStream dans TikaInputStream comme suggéré dans les commentaires, je pouvais voir que le problème est résolu

final Tika tika = new Tika(); 
    TikaInputStream tikaInputStream = TikaInputStream.get(uploadedInputStream); 
    String fileType = tika.detect(tikaInputStream); 
    System.out.println(fileType); 
    final Tika newTika = new Tika(); 
    String newFileType = newTika.detect(tikaInputStream); 
    System.out.println(newFileType); 

OutPut:

 application/pdf 
    application/pdf