Cómo extraer el tipo mime de un byte [] [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Tengo una página web que se puede utilizar para subir archivos.
Ahora necesito comprobar si el tipo de archivo es correcto (zip, jpg, pdf,...).

Puedo usar el tipo Mime que viene con la solicitud, pero no confío en el usuario y digamos que quiero ser seguro que nadie es capaz de subir un .archivo gif que fue renombrado .jpg
Creo que en este caso debería inspeccionar el número mágico.
Esta es una biblioteca java que he encontrado que parece lograr lo que necesito 'extraer el tipo mime del número mágico'.
¿Es esta una solución correcta o qué sugiere?

ACTUALIZACIÓN: He encontrado el proyecto mime-util y parece muy bueno y actualizado! (quizás mejor que Java Mime Magic ¿Biblioteca?)
Aquí hay una lista de proyectos de utilidad que pueden ayudarlo a extraer tipos mime

Author: Gray, 2009-12-16

3 answers

Intenta Java Mime Magic Library

byte[] data = ...
MagicMatch match = Magic.getMagicMatch(data);
String mimeType = match.getMimeType();
 22
Author: sfussenegger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-16 16:13:22

Estoy seguro de que la biblioteca publicada por @sfussenegger es la mejor solución, pero lo hago a mano con el siguiente fragmento que espero que pueda ayudarte.

DESCONOCIDO("desconocido", new byte[][] {}), PDF("PDF",
            new byte[][] { { 0x25, 0x50, 0x44, 0x46 } }), JPG("JPG",
            new byte[][] { { (byte) 0xff, (byte) 0xd8, (byte) 0xff,
                    (byte) 0xe0 } }), RAR("RAR", new byte[][] { { 0x52,
            0x61, 0x72, 0x21 } }), GIF("GIF", new byte[][] { { 0x47, 0x49,
            0x46, 0x38 } }), PNG("PNG", new byte[][] { { (byte) 0x89, 0x50,
            0x4e, 0x47 } }), ZIP("ZIP", new byte[][] { { 0x50, 0x4b } }), TIFF(
            "TIFF", new byte[][] { { 0x49, 0x49 }, { 0x4D, 0x4D } }), BMP(
            "BMP", new byte[][] { { 0x42, 0x4d } });

Saludos.

PD: Lo mejor de todo es que no tiene ninguna dependencia. PD2: ¡No hay garantía sobre su corrección! PD3:" desconocido "significa" desconocido "

 9
Author: ATorras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-16 15:33:09

El marco de activación es La respuesta de Sun a esto. Y bien puede tener esto ya en el classpath de su servidor de aplicaciones

 -2
Author: James B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-16 15:31:57