2016-12-22 11 views
0

Мне раньше удалось разобрать все файлы с помощью Tika, вызвав tika.parseToString() без установки каких-либо пользовательских настроек или метаданных. Теперь у меня есть необходимость фильтровать файлы для анализа на основе mime-типа.Tika не удалось разобрать после обнаружения mime-типа

Я могу найти mime-тип с tika.detect(new BufferedInputStream(inputStream), new Metadata());, но при вызове tika.parseToString() после этого tika использует EmptyParser, и обнаружен тип контента - «application/octet-stream». Это значение по умолчанию означает, что tika не может найти, какой тип файла он имеет. Я попытался установить тип содержимого в метаданных, прежде чем пытаться проанализировать файл, но это приводит к org.apache.tika.exception.TikaException: TIKA-198: Illegal IOException. Из того, что я прочитал, это означает, что файл искажен, но те же файлы успешно разбираются без предварительной проверки типа mime.

Определяет() что-то делает с InputStream, что делает синтаксический анализатор неспособным анализировать файлы?

Я использую тот же Тик-экземпляр как для проверки мима-типа и синтаксического анализа, версия 1,13

ответ

1

Моей проблема была вызвана пропусканием InputStream методы синтаксического анализа непосредственно. detect() и сбрасывает переданный поток, который InputStream не поддерживает. Обертка InputStream в TikaInputStream (TikaInputStream stream = TikaInputStream.get(new BufferedInputStream(inputStream));) решила проблему.