Obtenir le sous-type MimeType avec Apache tika
J'avais besoin d'obtenir la iana.org MediaType plutôt que de l'application/zip ou application/x-tika-msoffice pour les documents comme, odt, ppt, pptx, xlsx, etc.
Si vous regardez mimetypes.xml il y a mimeType éléments composé de la iana.org mime-type et la "sous-classe de"
<mime-type type="application/msword">
<alias type="application/vnd.ms-word"/>
............................
<glob pattern="*.doc"/>
<glob pattern="*.dot"/>
<sub-class-of type="application/x-tika-msoffice"/>
</mime-type>
Comment faire pour obtenir l'iana.org mime-type de nom de la place de la mère nom du type ?
Lors de l'essai du type mime de la détection, je n' :
MediaType mediaType = MediaType.parse(tika.detect(inputStream));
String mimeType = mediaType.getSubtype();
Résultats Du Test :
FAILED: getsCorrectContentType("application/vnd.ms-excel", docs/xls/en.xls)
java.lang.AssertionError: expected:<application/vnd.ms-excel> but was:<x-tika-msoffice>
FAILED: getsCorrectContentType("vnd.openxmlformats-officedocument.spreadsheetml.sheet", docs/xlsx/en.xlsx)
java.lang.AssertionError: expected:<vnd.openxmlformats-officedocument.spreadsheetml.sheet> but was:<zip>
FAILED: getsCorrectContentType("application/msword", doc/en.doc)
java.lang.AssertionError: expected:<application/msword> but was:<x-tika-msoffice>
FAILED: getsCorrectContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document", docs/docx/en.docx)
java.lang.AssertionError: expected:<application/vnd.openxmlformats-officedocument.wordprocessingml.document> but was:<zip>
FAILED: getsCorrectContentType("vnd.ms-powerpoint", docs/ppt/en.ppt)
java.lang.AssertionError: expected:<vnd.ms-powerpoint> but was:<x-tika-msoffice>
Est-il possible d'obtenir le véritable sous-type de mimetypes.xml ? Au lieu de x-tika-msoffice ou de l'application/zip ?
De plus je n'ai jamais eu d'application/x-tika-ooxml, mais l'application/zip pour xlsx, docx, pptx documents.
source d'informationauteur lisak
Vous devez vous connecter pour publier un commentaire.
À l'origine, Tika uniquement pris en charge la détection par le Mime, la Magie ou par une extension de fichier (glob), comme cela est d'autant plus mime de détection avant de Tika n'.
En raison de problèmes avec le Mime, la Magie et les globules quand il s'agit de la détection des formats de conteneur, il a été décidé d'ajouter quelques nouveaux détecteurs à Tika pour traiter ces. Le Conteneur au Courant des Détecteurs a pris la totalité du fichier, ouverts et traités le conteneur, et a ensuite travaillé sur le type de fichier exact basé sur le contenu. D'abord, vous avez besoin de les appeler explicitement, mais alors qu'ils étaient enveloppés dans des
ContainerAwareDetector
qui vous allez le voir dans certaines des réponses.Depuis, Tika a ajouté un service de chargeur de modèle, d'abord pour des Analyseurs. Cela a permis à des classes d'être auto-chargés, lorsqu'ils sont présents, avec une manière générale, pour identifier ceux qui étaient appropriés et les utiliser. Ce soutien a ensuite été étendu pour couvrir les Détecteurs de trop, à quel point le vieux
ContainerAwareDetector
pourrait être supprimé au profit de quelque chose de plus propre.Si vous êtes sur Tika 1.2 ou ultérieure, et que vous voulez une détection précise de tous les formats y compris des formats de conteneur, vous voulez faire quelque chose comme:
Si vous exécutez ce avec seulement le Noyau Tika pot (tika-core-1.2-....), alors le seul détecteur présent sera le mime, la magie, et vous obtiendrez le style ancien de la détection basée sur la magie + glob. Toutefois, si vous exécutez ce avec à la fois le Cœur et l'Analyseur Tika pots (en plus de leurs dépendances), ou de Tika App (qui comprend les principaux + les analyseurs + dépendances automatiquement), puis le DefaultDetector va utiliser tous les différents Conteneur des Détecteurs pour le traitement de votre dossier. Si votre fichier est basé sur le zip, puis la détection inclure le traitement de la fermeture à glissière structure pour identifier le type de fichier basé sur ce qui est là. Cela vous donnera la haute précision de détection que vous êtes après, sans avoir besoin d'appeler beaucoup de différents analyseurs à son tour.
DefaultDetector
va utiliser tous les Détecteurs qui sont disponibles.Pour toute autre personne ayant un problème similaire mais utilisant les nouvelles Tika version ceci devrait faire l'affaire:
ZipContainerDetector
puisque vous n'avez pas d'ContainerAwareDetector
plus.TikaInputStream
à ladetect()
méthode du détecteur pour s'assurer tika peut analyser le type mime correct.Titre d'exemple, mon code ressemble à ceci:
Noter que le
Document
classe est une partie de mon modèle de domaine. Alors vous allez certainement avoir quelque chose de similaire à cette ligne.J'espère que quelqu'un peut utiliser ce fichier.
Le défaut de motif d'octets règles de détection dans tika-core ne peut détecter le générique OLE2, ou en format ZIP utilisé par tous les types de documents MS Office. Vous souhaitez utiliser ContainerAwareDetector pour ce type de détection autant que je sache. Et l'utilisation MimeTypes détecteur de secours détecteur. Essayez ceci :
De cette façon, vos tests doivent passer
Vous pouvez utiliser un personnalisé tika fichier de config:
Dans le WEB-INF/classes de mettre le "tika-custom-MimeTypes.xml" avec vos modifications:
Dans mon cas: