Изначально Tika поддерживала обнаружение только по Mime Magic или по расширению файла (glob), так как это все самое большое обнаружение пантомимы до того, как это сделала Tika.
Из-за проблем с Mime Magic и globs, когда дело доходит дообнаруживая форматы контейнеров, было решено добавить несколько новых детекторов в Tika для их обработки.Контейнерные детекторы извлекали весь файл, открывали и обрабатывали контейнер, а затем определяли точный тип файла на основе содержимого.Изначально вам нужно было вызывать их явно, но затем они были заключены в ContainerAwareDetector
, который вы увидите в некоторых ответах.
С тех пор Tika добавила шаблон загрузчика служб, первоначально для Parsers,Это позволило автоматически загружать классы при их наличии, с общим способом определить, какие из них были подходящими, и использовать их.Затем эта поддержка была расширена и на детекторы, после чего старый ContainerAwareDetector
можно было бы удалить в пользу чего-то более чистого.
Если вы пользуетесь Tika 1.2 или более поздней версией, и вам нужно точное обнаружение всехформаты, включая форматы контейнеров, вы хотите сделать что-то вроде:
TikaConfig config = TikaConfig.getDefaultConfig();
Detector detector = config.getDetector();
TikaInputStream stream = TikaInputStream.get(fileOrStream);
Metadata metadata = new Metadata();
metadata.add(Metadata.RESOURCE_NAME_KEY, filenameWithExtension);
MediaType mediaType = detector.detect(stream, metadata);
Если вы запускаете это только с Core Tika jar (tika-core-1.2 -....), то присутствует только один детекторбудет волшебной пантомимой, и вы получите обнаружение старого стиля, основанное только на магии + шар.Тем не менее, если вы запустите это с помощью jika-кода Core и Parser Tika (плюс их зависимости) или из приложения Tika (которое автоматически включает core + parsers + зависимости), тогда DefaultDetector будет использовать все различные детекторы контейнеров для обработки вашего файла.,Если ваш файл основан на zip, то обнаружение будет включать обработку структуры zip для определения типа файла на основе того, что там находится.Это даст вам высокую точность обнаружения, которую вы ищете, без необходимости вызывать множество различных анализаторов по очереди.DefaultDetector
будет использовать все доступные детекторы.