2015-07-24 6 views
1

Я пытаюсь выяснить тип содержимого файла, используя апачский TIKA.Apache Тика детектирование возвращается противоречивый результат

означает, в то время как я нашел это противоречивое поведение.

final Tika tika = new Tika(); 

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

приведенный выше код дает мне кладется как

application/pdf 
application/octet-stream 

Я ожидаю выход, как application/pdf в обоих случаях.

Может кто-нибудь объяснить, почему это происходит, как это? как я могу получить предполагаемый результат?

+1

Apache Тика имеет несколько требований о том, какой InputStream он может обнаруживать, не изменяя его состояние. Что произойдет, если вы попробуете обернуть свою продукцию в TikaInputStream? – Gagravarr

+0

Большое спасибо, этот помог мне. Не могли бы вы, пожалуйста, тел мне больше о, почему это происходит с нормальным InputStream и как TikaInputStream решаемые его – manoj

+2

Когда Тика делается обнаружения, он должен перемотать поток для следующего пользователя (например, второй обнаружения). Если ваш поток утверждает, что поддерживает перемотку, но на самом деле это не так, тогда эти байты исчезнут, и вы набиты .... – Gagravarr

ответ

0

Когда я обернул InputStream в TikaInputStream, как предложено в комментариях, я мог видеть, что проблема решена

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

Выход:

 application/pdf 
    application/pdf