java - Cómo extraer MimeType de un byte
file mime-types (3)
El marco de activación es la respuesta de Sun a esto . Y es posible que ya tengas esto en la ruta de clase de tu servidor de aplicaciones
Esta pregunta ya tiene una respuesta aquí:
- Obteniendo Mimo de un archivo Escriba In Java 18 respuestas
Tengo una página web que se puede usar para subir archivos.
Ahora necesito verificar si el tipo de archivo es correcto (zip, jpg, pdf, ...).
Puedo usar el mimeType que viene con la solicitud, pero no confío en el usuario y digamos que quiero asegurarme de que nadie pueda subir un archivo .gif que haya sido renombrado en .jpg
Creo que en este caso debería inspeccionar el número mágico .
This es una biblioteca de Java que he encontrado que parece lograr lo que necesito ''extraer el tipo mimético del número mágico''.
¿Es esta una solución correcta o qué sugieres?
ACTUALIZACIÓN: ¡He encontrado el proyecto mime-util y parece muy bueno y actualizado! (¿Tal vez mejor que Java Mime Magic Library?)
Aquí hay una lista de proyectos de utilidad que pueden ayudarlo a extraer tipos de mimo
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 ayudarlo.
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 es que no tiene ninguna dependencia. PD2: ¡No hay garantía sobre su corrección! PD3: "desconocido" significa "desconocido" (en español)
Pruebe la Biblioteca Mágica Java Mime
byte[] data = ...
MagicMatch match = Magic.getMagicMatch(data);
String mimeType = match.getMimeType();