Pregunta

Quiero obtener el tipo MIME de un nombre de archivo usando C.¿Hay alguna manera de hacer esto sin usar un archivo de texto que contenga tipos MIME y extensiones de archivo (es decir,archivo de apache mime.types)?

¿Quizás haya una función para obtener el tipo MIME usando el nombre del archivo?Prefiero no usar la extensión de archivo si no es necesario.

¿Fue útil?

Solución

Si hubiera una manera de hacerlo, Apache no necesitaría su mime.types ¡archivo!

La mesa tiene que estar en alguna parte.Está en un archivo separado que se analiza mediante su código o está codificado en su software.Cuanto más claro sea lo primero, mejor será la solución...

También es posible adivinar el tipo MIME de un archivo examinando el contenido del archivo, es decir.campos de encabezado, estructuras de datos, etc.Este es el enfoque utilizado por el file(1) programa y también por Apache mod_mime_magic.En ambos casos, todavía usan un archivo de texto separado para almacenar las reglas de búsqueda en lugar de tener detalles codificados en el programa mismo.

Otros consejos

Acabo de implementar esto para un proyecto en el que estoy trabajando. libmagic es lo que estás buscando. En RHEL / CentOS es proporcionado por file-libs y file-devel. Debian / Ubuntu parece ser libmagic-dev.

http://darwinsys.com/file/

Aquí hay un código de ejemplo:

#include <stdio.h>
#include <magic.h>

int main(int argc, char **argv){
  const char *mime;
  magic_t magic;

  printf("Getting magic from %s\n", argv[1]);

  magic = magic_open(MAGIC_MIME_TYPE); 
  magic_load(magic, NULL);
  magic_compile(magic, NULL);
  mime = magic_file(magic, argv[1]);

  printf("%s\n", mime);
  magic_close(magic);

  return 0;
}

El siguiente código utiliza la base de datos mágica predeterminada / usr / share / misc / magic. Una vez que haya instalado los paquetes de desarrollo, la página de manual de libmagic es bastante útil. Sé que esta es una vieja pregunta, pero la encontré en mi búsqueda de la misma respuesta. Esta fue mi solución preferida.

por lo que sé, el comando unix file genera la cadena mime con la opción -i:

> file -i main.c
main.c: text/x-c charset=us-ascii

Puede descargar el código fuente del archivo " " herramienta desde aquí:

ftp://ftp.astron.com/pub/file/

La cuestión es que no utiliza una licencia GPL como, o ninguna por el caso.

Si quieres usar un servicio web, acabo de crear esto como parte de mi tipo mime < - > servicio de icono

http://stdicon.com/

Por ejemplo:

http://stdicon.com/ext/html

Se ejecuta en appengine, por lo que debe tener alta disponibilidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top