Entwickler-Ecke

Dateizugriff - MIME Type aus Dateierweiterung bestimmen


dirkil2 - Sa 03.01.09 00:48
Titel: MIME Type aus Dateierweiterung bestimmen
Wie kann ich in Delphi den korrekten MIME-Type zu einer Dateierweiterung bestimmen. Also z.B.:

.zip -> application/x-zip-compressed

Sicherlich kann ich eine Liste hinterlegen und diese dann entsprechend abfragen, aber werden die MIME Types nicht irgendwo in der Registry abgelegt? Oder gibt es eine Systemfunktion, die das macht oder eine INDY- oder JEDI-Komponente?

Bin für jeden Tipp dankbar.

Dirk.


jaenicke - Sa 03.01.09 00:51

Schau dir mal in der Registry den Zweig HKEY_CLASSES_ROOT an ;-).

Da gibt es bei vielen Dateitypen den Wert "Content Type", rate mal was da drin steht. :mrgreen:


BenBE - Sa 03.01.09 02:09

Ich dachte zuerst an so etwas wie "Himmelsrichtung mit dem Kompass bestimmen" (was etwa genauso viel Sinn ergibt, weil die Richtung in die der Kompass zeigt, nicht zwingend Norden sein muss :mrgreen:, aber gut, das ist ein andres Thema) und von daher mal ein kleiner Hinweis, wie man es besser machen kann:

Direkt anhand der Erweiterung auf den Inhalt zu schließen ist zwar theoretisch möglich (wie user profile iconjaenicke schon gesagt hat), Detaillierter sind aber Herangehensweisen wie es etwa file unter Unix macht, was anhand des Inhaltes nähere Details über den Content-Type erfragt\ermittelt.


Dunkel - Sa 03.01.09 02:46

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Direkt anhand der Erweiterung auf den Inhalt zu schließen ist zwar theoretisch möglich (wie user profile iconjaenicke schon gesagt hat), Detaillierter sind aber Herangehensweisen wie es etwa file unter Unix macht, was anhand des Inhaltes nähere Details über den Content-Type erfragt\ermittelt.

Richtig! In unixoiden BS kann man ein Bitmap auch die Dateierweiterung .txt geben, nichts desto trotz wird (meistens) beim öffnen der "Fake.txt" das Bildbearbeitungsprogramm geöffnet. DOS und Windows identifizieren leider einen Dateityp (fast) nur anhand der Dateiendung.
Natürlich kann man von jeder Datei die ersten n Bytes lesen (in der sich hoffentlich eine Art Header befindet) und dadurch auf den Contenttype schließen, nur besitzt nicht jedes Dateiformat ein Header...


Narses - Sa 03.01.09 15:47
Titel: Re: MIME Type aus Dateierweiterung bestimmen
Moin!

user profile icondirkil2 hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich in Delphi den korrekten MIME-Type zu einer Dateierweiterung bestimmen. [...]Oder gibt es eine Systemfunktion, die das macht oder eine INDY- oder JEDI-Komponente?
Schau mal in die Indy9-HTTPServer-Demo:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  MIMEMap: TIdMIMETable;

function TfmHTTPServerMain.GetMIMEType(sFile: TFileName): String;
begin
  result := MIMEMap.GetFileMIMEType(sFile);
end;
Damit sollte das auch gehen. ;)

cu
Narses


jaenicke - Sa 03.01.09 16:00

Ja, dort sind ca. 150 Typen bereits vordefiniert, und je nach Einstellung wird die Registry ebenfalls ausgelesen. Dabei wird der angesprochene Eintrag in jedem Schlüssel gesucht und ggf. ausgelesen.

Wobei die vordefinierten Typen evtl. ja bereits reichen. ;-)

Hier übrigens die entsprechende Online-Doku:
http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=TIdMimeTable.html