java - octet - mime type list
Cómo determinar la extensión de archivo adecuada de MIME Type en Java (1)
Estoy cargando archivos en un cubo de Amazon s3 y tengo acceso al InputStream y una cadena que contiene el tipo MIME del archivo pero no el nombre original del archivo. Depende de mí crear realmente el nombre y la extensión del archivo antes de subir el archivo a S3. ¿Existe una biblioteca o una forma conveniente de determinar la extensión apropiada para usar desde el tipo MIME?
He visto algunas referencias a la biblioteca de Apache Tika, pero parece una exageración y todavía no he podido detectar extensiones de archivos. Por lo que he podido reunir, parece que este código debería funcionar, pero solo estoy obteniendo una cadena vacía cuando mi variable de tipo es "image / jpeg"
MimeType mimeType = null;
try {
mimeType = new MimeTypes().forName(type);
} catch (MimeTypeException e) {
Logger.error("Couldn''t Detect Mime Type for type: " + type, e);
}
if (mimeType != null) {
String extension = mimeType.getExtension();
//do something with the extension
}
Como han señalado algunos de los comentaristas, no existe una correspondencia universal 1: 1 entre los tipos miméticos y las extensiones de archivos ... Algunos tipos de miméticos tienen más de una extensión posible, muchas extensiones son compartidas por múltiples tipos mimet y algunos mimetypes no tienen extensión.
Siempre que sea posible, es mucho mejor que guardes el tipo mimet y lo uses en el futuro, y te olvides de la extensión.
Dicho esto, si quieres obtener la extensión de archivo más común para un tipo mimet dado, entonces Tika es una buena forma de hacerlo. Apache Tika tiene un gran conjunto de tipos miméticos que conoce, y para muchos de ellos también conoce la magia del mimo para la detección, extensiones comunes, descripciones, etc.
Si desea obtener la extensión más común para un archivo JPEG, como se muestra en esta prueba de la unidad Apache Tika, solo tiene que hacer algo como:
MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
MimeType jpeg = allTypes.forName("image/jpeg");
String jpegExt = jpeg.getExtension(); // .jpg
assertEquals(".jpg", jpeg.getExtension());
La clave es que debe cargar el archivo xml que está incluido en el contenedor Tika para obtener las definiciones de todos los tipos mimet. Si también está tratando con tipos de mimet personalizados, Tika los respalda y cambia la línea uno por:
TikaConfig config = TikaConfig.getDefaultConfig();
MimeTypes allTypes = config.getMimeRepository();
Al usar el método TikaConfig para obtener MimeTypes, Tika también verificará su classpath para definiciones de mimetype personalizadas, e incluirá también las mismas.