Frage

Ich mag den MIME-Typen aus einem Dateinamen erhalten C unter Verwendung von Gibt es eine Möglichkeit, dies zu tun, ohne eine Textdatei enthält MIME-Typen und Dateierweiterungen (d Apache-Datei mime.types)?

Vielleicht gibt es eine Funktion, um den MIME-Typen mit dem Dateinamen zu bekommen? Ich eher nicht die Dateierweiterung verwenden, wenn ich nicht haben.

War es hilfreich?

Lösung

Wenn es ein Weg, es zu tun, würde Apache braucht seine mime.types Datei nicht!

Die Tabelle hat irgendwo sein. Es ist entweder in einer separaten Datei, die durch den Code analysiert wird, oder es ist schwer in Ihre Software codiert. Ersteres ist klarer die bessere Lösung ...

Es ist auch möglich, bei dem MIME-Typ einer Datei zu erraten, indem Sie den Inhalt der Datei untersuchen, das heißt Header-Felder, Datenstrukturen, etc. Dies ist der Ansatz des file(1) Programm verwendet und auch von Apache mod_mime_magic. In beiden Fällen verwenden sie immer noch eine separate Textdatei, die Lookup-Regeln zu speichern, anstatt irgendwelche Details hartcodiert im Programm selbst.

Andere Tipps

ich dies nur für ein Projekt umgesetzt, an dem ich arbeite. libmagic ist das, was Sie suchen. Auf RHEL / CentOS seinen von Datei-Libs und Datei-devel zur Verfügung gestellt. Debian / Ubuntu erscheint libmagic-dev zu sein.

http://darwinsys.com/file/

Hier ist ein Beispielcode:

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

Der folgende Code verwendet die Standard magische Datenbank / usr / share / misc / Magie. Sobald Sie die dev-Pakete installiert zu bekommen, ist die libmagic Manpage ziemlich hilfreich. Ich weiß, das ist eine alte Frage, aber ich fand es auf meiner Jagd nach der gleichen Antwort. Dies war meine bevorzugte Lösung.

soweit ich weiß, gibt die Unix-Befehl file den Mime-String mit der Option -i:

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

Sie können den Quellcode der „Datei“ -Tool von hier herunterladen:

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

Die Sache ist es nicht eine GPL wie Lizenz nicht verwendet, oder ein für diese Angelegenheit.

Wenn Sie eine Webservice verwenden wollen, ich das gerade erstellt als Teil meines MIME-Typs <-> Symbol Dienst

http://stdicon.com/

Zum Beispiel:

http://stdicon.com/ext/html

Es läuft auf appengine so sollte es eine hohe Verfügbarkeit hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top