Estoy buscando una biblioteca de Java que le indique el tipo de mimo mirando el contenido del archivo (matriz de bytes). Encontré este proyecto utilizando jmimemagic y ya no es compatible con los tipos de archivos más nuevos (por ejemplo, el formato MS Word docx) ya que ahora está inactivo (a partir de 2006).biblioteca de Java para encontrar el tipo de mime desde el contenido del archivo
Respuesta
Use Apache tika para la detección de contenido. Por favor encuentre el enlace a continuación. http://tika.apache.org/0.8/detection.html. Tenemos tantas dependencias tarro donde puede encontrar cuando se genera tika utilizando 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);
Tal vez útil para alguien, que necesita los formatos de oficina más utilizadas, así (y no utiliza 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;
}
}
No tiene idea de cuánto tiempo he estado buscando un ejemplo de esto. ¡Muchas gracias! – Mike
¡Esto me ahorró una cantidad de tiempo desmesurada para actualizar una de mis aplicaciones y reconocer las nuevas extensiones de MS Office correctamente! ¡Gracias! – Saggio
Tuve que cambiar 'if (! StringUtils.hasText (contentType)) {' a 'if (StringUtils.isBlank (contentType)) {'. Gracias por el codez! –
Yo uso javax.activation.MimetypesFileTypeMap
. Comienza con un conjunto pequeño: $JRE_HOME/lib/content-types.properties
, pero puede agregar el suyo. Cree un archivo mime.types
en el formato que se muestra en el javadoc de MimetypesFileTypeMap
(comencé con una gran lista de la red, lo masajeé y agregué tipos que no encontré). Ahora puede agregar eso en su código abriendo su archivo mime.types
y agregando su contenido a su mapa. Sin embargo, la solución más fácil es agregar su archivo mime.types
al META-INF
de su jar. java.activation
recogerá eso automáticamente.
- 1. Biblioteca NET para detección de tipo archivo/mime
- 2. Encontrar un tipo MIME para un archivo en Windows
- 3. Obtener el tipo MIME del nombre de archivo en C
- 4. Lanzando un intento para el tipo de archivo y MIME?
- 5. tipo MIME para el archivo zip en Google Chrome
- 6. Declaración del tipo de mime para html-email
- 7. ¿Cómo obtener el tipo MIME de un archivo en Qt?
- 8. correcta para el tipo mime .mp4
- 9. Finfo_file el archivo cargado para determinar tipo MIME
- 10. el tipo MIME correcto para JSON?
- 11. ¿Cuál es el tipo mime de un archivo wsdl?
- 12. ¿Cómo saber cuál es el tipo MIME según el archivo?
- 13. PowerShell: ¿es posible determinar el tipo MIME de un archivo?
- 14. ¿Cómo leer el contenido del archivo desde un archivo?
- 15. ¿La mejor manera de determinar el tipo de mime de un archivo en java?
- 16. configuración del tipo de contenido para archivos mp4 en s3
- 17. Tipo MIME para msgpack?
- 18. La publicación HTTP de varias partes de Android no envía el tipo MIME del archivo
- 19. Para ver el contenido del archivo .jar
- 20. ¿Corregir la extensión del nombre de archivo para el formato de archivo MIME "texto/enriquecido"?
- 21. Recuperando el contenido del archivo usando FTPClient Java
- 22. ¿Cómo usar el tipo CSV MIME?
- 23. archivo Rendering con el tipo MIME en los carriles
- 24. El contenido del tipo de elemento "..." debe coincidir en web.xml
- 25. Cómo determinar el tipo de certificado desde el archivo
- 26. ¿Cuál es el tipo de mime correcto para servir un archivo .ipa de iPhone?
- 27. cómo obtener el tipo de tipo/mime real en JAVA (como finfo \ mime_content_type en PHP)?
- 28. ¿Cómo agregar un tipo de mime personalizado?
- 29. ¿Cómo obtener la extensión de archivo del tipo de contenido?
- 30. jQuery o JavaScript: obtenga el tipo MIME del archivo de cliente
http://sourceforge.net/projects/mime-util/files/mime-util/mime-util-2.1.3/ – khachik
No creo que sea un duplicado de la pregunta a la que se hace referencia porque el autor pregunta explícitamente por detección por el contenido del archivo, mientras que las soluciones para la otra pregunta se refieren a un archivo (nombre de archivo incluido). – danielp
¿Qué pasa con las soluciones [aquí] (http://www.rgagnon.com/javadetails/java-0487.html). ¿No funcionan para ti? – javamonkey79