Domanda

Voglio ottenere il tipo MIME da un nome file usando C. Esiste un modo per farlo senza utilizzare un file di testo contenente tipi MIME ed estensioni di file (ovvero il file Apache mime.types)?

Forse esiste una funzione per ottenere il tipo MIME usando il nome file? Preferisco non usare l'estensione del file se non devo.

È stato utile?

Soluzione

Se ci fosse un modo per farlo, Apache non avrebbe bisogno del suo mime.types file!

La tabella deve essere da qualche parte. È in un file separato che viene analizzato dal codice o è codificato nel software. La prima è più chiara la soluzione migliore ...

È anche possibile indovinare il tipo MIME di un file esaminando il contenuto del file, ovvero campi di intestazione, strutture di dati, ecc. Questo è l'approccio utilizzato dal programma file(1) e anche da mod_mime_magic di Apache . In entrambi i casi usano ancora un file di testo separato per archiviare le regole di ricerca piuttosto che avere dettagli codificati nel programma stesso.

Altri suggerimenti

L'ho appena implementato per un progetto a cui sto lavorando. libmagic è quello che stai cercando. Su RHEL / CentOS è fornito da file-libs e file-devel. Debian / Ubuntu sembra essere libmagic-dev.

http://darwinsys.com/file/

Ecco un esempio di codice:

#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;
}

Il codice seguente utilizza il database magico predefinito / usr / share / misc / magic. Una volta installati i pacchetti dev, la pagina man di libmagic è abbastanza utile. So che questa è una vecchia domanda, ma l'ho trovata in caccia per la stessa risposta. Questa era la mia soluzione preferita.

per quanto ne so, il comando unix file genera la stringa mime con l'opzione -i:

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

Puoi scaricare il codice sorgente del " file " strumento da qui:

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

Il fatto è che non usa una licenza simile a GPL, o qualsiasi altra cosa.

Se vuoi usare un servizio web, l'ho appena creato come parte del mio mimetype < - > servizio icona

http://stdicon.com/

Ad esempio:

http://stdicon.com/ext/html

Funziona su appengine quindi dovrebbe avere un'alta disponibilità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top