Je cherche une bibliothèque java qui vous indique le type mime en regardant le contenu du fichier (tableau d'octets). J'ai trouvé ce projet en utilisant jmimemagic et il ne supporte plus les nouveaux types de fichiers (par exemple, le format MS Word docx) car il est inactif maintenant (à partir de 2006).bibliothèque java pour trouver le type mime à partir du contenu du fichier
Répondre
Utilisez Apache tika pour la détection de contenu. Veuillez trouver le lien ci-dessous. http://tika.apache.org/0.8/detection.html. Nous avons tant de dépendances de pot que vous pouvez trouver lorsque vous créez tika en utilisant maven
ByteArrayInputStream bai = new ByteArrayInputStream(pByte);
ContentHandler contenthandler = new BodyContentHandler();
Metadata metadata = new Metadata();
Parser parser = new AutoDetectParser();
try {
parser.parse(bai, contenthandler, metadata);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TikaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Mime: " + metadata.get(Metadata.CONTENT_TYPE));
return metadata.get(Metadata.CONTENT_TYPE);
Peut-être utile pour quelqu'un qui a besoin de formats de bureau les plus utilisés aussi bien (et ne pas utiliser Apache Tika):
public class MimeTypeUtils {
private static final Map<String, String> fileExtensionMap;
static {
fileExtensionMap = new HashMap<String, String>();
// MS Office
fileExtensionMap.put("doc", "application/msword");
fileExtensionMap.put("dot", "application/msword");
fileExtensionMap.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
fileExtensionMap.put("dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template");
fileExtensionMap.put("docm", "application/vnd.ms-word.document.macroEnabled.12");
fileExtensionMap.put("dotm", "application/vnd.ms-word.template.macroEnabled.12");
fileExtensionMap.put("xls", "application/vnd.ms-excel");
fileExtensionMap.put("xlt", "application/vnd.ms-excel");
fileExtensionMap.put("xla", "application/vnd.ms-excel");
fileExtensionMap.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
fileExtensionMap.put("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template");
fileExtensionMap.put("xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12");
fileExtensionMap.put("xltm", "application/vnd.ms-excel.template.macroEnabled.12");
fileExtensionMap.put("xlam", "application/vnd.ms-excel.addin.macroEnabled.12");
fileExtensionMap.put("xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12");
fileExtensionMap.put("ppt", "application/vnd.ms-powerpoint");
fileExtensionMap.put("pot", "application/vnd.ms-powerpoint");
fileExtensionMap.put("pps", "application/vnd.ms-powerpoint");
fileExtensionMap.put("ppa", "application/vnd.ms-powerpoint");
fileExtensionMap.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
fileExtensionMap.put("potx", "application/vnd.openxmlformats-officedocument.presentationml.template");
fileExtensionMap.put("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow");
fileExtensionMap.put("ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12");
fileExtensionMap.put("pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12");
fileExtensionMap.put("potm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12");
fileExtensionMap.put("ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12");
// Open Office
fileExtensionMap.put("odt", "application/vnd.oasis.opendocument.text");
fileExtensionMap.put("ott", "application/vnd.oasis.opendocument.text-template");
fileExtensionMap.put("oth", "application/vnd.oasis.opendocument.text-web");
fileExtensionMap.put("odm", "application/vnd.oasis.opendocument.text-master");
fileExtensionMap.put("odg", "application/vnd.oasis.opendocument.graphics");
fileExtensionMap.put("otg", "application/vnd.oasis.opendocument.graphics-template");
fileExtensionMap.put("odp", "application/vnd.oasis.opendocument.presentation");
fileExtensionMap.put("otp", "application/vnd.oasis.opendocument.presentation-template");
fileExtensionMap.put("ods", "application/vnd.oasis.opendocument.spreadsheet");
fileExtensionMap.put("ots", "application/vnd.oasis.opendocument.spreadsheet-template");
fileExtensionMap.put("odc", "application/vnd.oasis.opendocument.chart");
fileExtensionMap.put("odf", "application/vnd.oasis.opendocument.formula");
fileExtensionMap.put("odb", "application/vnd.oasis.opendocument.database");
fileExtensionMap.put("odi", "application/vnd.oasis.opendocument.image");
fileExtensionMap.put("oxt", "application/vnd.openofficeorg.extension");
}
public static String getContentTypeByFileName(String fileName) {
// 1. first use java's buildin utils
FileNameMap mimeTypes = URLConnection.getFileNameMap();
String contentType = mimeTypes.getContentTypeFor(fileName);
// 2. nothing found -> lookup our in extension map to find types like ".doc" or ".docx"
if (!StringUtils.hasText(contentType)) {
String extension = FilenameUtils.getExtension(fileName);
contentType = fileExtensionMap.get(extension);
}
return contentType;
}
}
Vous n'avez aucune idée de combien de temps j'ai cherché un exemple de ceci. Merci beaucoup! – Mike
Cela m'a juste sauvé un temps démesuré pour mettre à jour une de mes applications afin de reconnaître correctement les nouvelles extensions MS Office! Merci! – Saggio
Je devais changer 'if (! StringUtils.hasText (contentType)) {' en '(StringUtils.isBlank (contentType)) {'. Merci pour le codez! –
J'utilise javax.activation.MimetypesFileTypeMap
. Il commence par un petit ensemble: $JRE_HOME/lib/content-types.properties
, mais vous pouvez ajouter vous-même. Créer un fichier mime.types
dans le format indiqué dans javadoc MimetypesFileTypeMap
(j'ai commencé avec une grande liste sur le net, massé, et ajouté les types que j'ai trouvé manquant). Maintenant, vous pouvez ajouter cela dans votre code en ouvrant votre fichier mime.types
et en ajoutant son contenu à votre carte. Cependant, la solution la plus simple consiste à ajouter votre fichier mime.types
au META-INF
de votre pot. java.activation
le ramassera automagiquement.
http://sourceforge.net/projects/mime-util/files/mime-util/mime-util-2.1.3/ – khachik
Je ne pense pas que ce soit un doublon à la question référencée parce que l'auteur demande explicitement détection par le contenu du fichier alors que les solutions pour l'autre question se réfèrent à un fichier (nom de fichier inclus). – danielp
Qu'en est-il des solutions [ici] (http://www.rgagnon.com/javadetails/java-0487.html). Ne travaillent-ils pas pour vous? – javamonkey79