Ottieni il tipo MIME dal nome file in C
-
05-07-2019 - |
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.
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.
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
Ad esempio:
Funziona su appengine quindi dovrebbe avere un'alta disponibilità.