2010-11-18 12 views
1

Ich probiere einige CGI-Skripts in Python aus. Wenn eine Anfrage zu meinem Python-Skript kommt, wie finde ich den Mime-Typ des Dateityps?Wie finde ich Mime-Typ in Python

UPDATE: Hinzufügen weiterer Informationen Einige Bilder für jetzt, adderess/image.jpg. Aber wenn ich verstehe, Mime-Typ ist Teil der Header, die die Web-Browser sendet, oder? Wie lese ich diese Header?

+1

Welchen Dateityp? –

+0

Einige Bilder für jetzt, http: //adderess/image.jpg. Aber wenn ich verstehe "Mime-Typ" ist Teil der Header, die die Web-Browser sendet, oder? Wie lese ich diese Header? –

Antwort

2

Sie haben zwei Möglichkeiten. Wenn Ihr Glück hat, kann der Client den MIME-Typ der Datei bestimmen und er kann in den Formular-Post eingefügt werden. Normalerweise ist dies der Wert eines Eingabeelements, dessen Name "Dateityp" oder etwas Ähnliches ist.

Andernfalls können Sie den Mimetyp aus der Dateierweiterung auf dem Server erraten. Dies hängt etwas davon ab, wie aktuell das Modul mimetypes ist. Beachten Sie, dass Sie Typen oder Überschreibungstypen im Modul hinzufügen können. Dann verwenden Sie die Funktion "guess_type", die den Mimetyp aus der Dateinamenerweiterung interpretiert.

import mimetypes 
mimetypes.add_type('video/webm','.webm') 

... 

    mimetypes.guess_type(filename) 

UPDATE: Wenn ich mich richtig erinnere, können Sie die Client-Interpretation des MIME-Typs aus den "Content-Type" Header erhalten. In den meisten Fällen ist dies ein "Application/Octet-Stream", der fast nutzlos ist.

Wenn Sie also das cgi-Modul verwenden und Dateien mit dem üblichen mehrteiligen Formular hochladen, wird der Browser den MIME-Typ für Sie erraten. Es scheint einen guten Job zu machen und wird an den Parameter form.type übergeben. So können Sie etwas tun:

import cgi 
form = cgi.FieldStorage() 
files_types = {}; 
if form.type == 'multipart/form-data': 
    for part in form.keys(): 
     files_types[form[part].filename] = form[part].type 
else: 
    files_types[form.filename] = form.type 
+0

guess_type() schaut nur auf die URL, nicht auf den eigentlichen Inhalt, also wird es nur so genau sein wie Ihre Benutzer ehrlich sind, was bedeutet, dass es nicht funktioniert. – Cerin

0

erhalten Angenommen, Sie Dateien mit einem HTML-Formular wie folgt einreichen:

<form enctype="multipart/form-data" method="post"> 
    <input name="userfile" type="file" /> 
    <input type="submit" value="Send File" /> 
</form> 

Sie können die Datei bekommen Geben Sie dies in einem Python-CGI-Skript ein:

form = cgi.FieldStorage() 
filetype = form['userfile'].type 

Berücksichtigen Sie, dass die s Der Dateityp "ubmitted" wird vom Client-Webbrowser festgelegt. Es wird von der Python-CGI-Bibliothek oder dem HTTP-Server nicht erkannt. Sie können das Python-Modul mimetypes verwenden, um MIME-Typen aus Dateierweiterungen zu erraten (z. B. mimetypes.guess_type(form['userfile'].name)). Sie können auch den Befehl UNIX file für höchste Zuverlässigkeit verwenden, obwohl dies normalerweise zu teuer ist.

Verwandte Themen