Frage

Ich weiß, dass ich Image -Uploads akzeptieren kann, indem ich ein Formular zur App -Engine wie SO habe:

<form action="/upload_received" enctype="multipart/form-data" method="post">
<div><input type="file" name="img"/></div>
<div><input type="submit" value="Upload Image"></div>
</form>

Dann kann ich in dem Python -Code so etwas tun wie

image = self.request.get("img")

Aber wie kann ich herausfinden, wie der Inhalt dieses Bildes sein sollte, wenn es später dem Benutzer angezeigt wird? Es scheint der robusteste Weg zu sein, dies aus den Bilddaten selbst herauszufinden, aber wie kann man so leicht bekommen? Ich habe nichts im Google.Akengine.API -Bilderpaket gesehen.

Sollte ich nur nach den magischen Bildhöfen in meinem eigenen Code suchen, oder gibt es dafür schon irgendwo eine Methode?

Bearbeiten:

Hier ist die simple Lösung, die ich verwendete, scheint für meine Zwecke gut genug zu funktionieren und vermeidet es, den Bildtyp als separates Feld im Datenspeicher zu speichern:

# Given an image, returns the mime type or None if could not detect.
def detect_mime_from_image_data(self, image):
    if image[1:4] == 'PNG': return 'image/png'
    if image[0:3] == 'GIF': return 'image/gif'
    if image[6:10] == 'JFIF': return 'image/jpeg'
    return None
War es hilfreich?

Lösung

Verwenden Sie anstatt self.request.get (FieldName) self.request.post [FieldName]. Dies gibt ein CGI.FieldStorage -Objekt zurück (siehe Details für die Python Library -Dokumente), die "Dateiname", "Typ" und "Wert" enthält.

Andere Tipps

Probieren Sie das Python Mimetypes -Modul aus, es wird den Inhaltstyp und die Codierung für Sie erraten.

z.B

>> Mimetypen importieren

>> mimetypes.guess_type ("/home/sean/desktop/comedy/30seconds.mp4")

('Video/mp4', keine)

Basierend auf meiner Forschung bestimmen Browser mit Ausnahme des Internet Explorer (mindestens Version 6) den Dateimime -Typ mithilfe der Erweiterung der Datei. Angesichts der Tatsache, dass Sie Bildmime -Typen wünschen, können Sie ein einfaches Python -Wörterbuch verwenden, um dies zu erreichen.

Leider kenne ich keine Methode in Python, die versucht, den Bildtyp durch das Lesen einiger magischer Bytes zu erraten (der Weg Dateiinformation tut in PHP). Vielleicht könnten Sie das Prinzip der EAFP (leichter zu bitten um Vergebung als die Erlaubnis bitten) anwenden.

Ja, es scheint, dass die Bild -API Ihnen nicht die Art des geladenen Bildtyps sagt. Was ich in diesem Fall tun würde, ist es, dieses Python -Wörterbuch zu erstellen, um Dateierweiterungen zu Bildmime -Typen zu kartieren und zu versuchen, das Bild zu laden, während er für eine erwartet wird NotImageError() Ausnahme. Wenn alles gut läuft, dann gehe ich davon aus, dass der Mime -Typ in Ordnung war.

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