2011-01-13 4 views
4

Normalerweise würde ich es StringIO Objekt herunterladen, dann folgt ausführen:Wie verwende ich Python-Magie, um den Dateityp einer Datei über das Internet zu erhalten?

m = magic.Magic() 
m.from_buffer(thefile.read(1024)) 

Aber dieses Mal, ich kann die Datei nicht herunterladen, da das Bild 20 Megabytes sein könnte. Ich möchte Python-Magie verwenden, um den Dateityp zu finden, ohne die gesamte Datei herunterzuladen.

Wenn python-magic es nicht kann ... ist der nächste beste Weg, den Mime-Typ in den Headern zu beobachten? Aber wie genau ist das?

Ich brauche Genauigkeit.

Antwort

7

Sie können read(1024) aufrufen, ohne die gesamte Datei herunterzuladen:

thefile = urllib2.urlopen(someURL) 

Dann einfach Ihre vorhandenen Code verwenden. urlopen gibt ein dateiähnliches Objekt zurück, das funktioniert natürlich.

2

Wenn es eines der gängigen Bildformate wie PNG von jpg ist, und Sie sehen, der Server ist ein zuverlässiger, dann können Sie die 'Content-Type' Header verwenden, um zu geben, was Sie suchen.

Aber das ist nicht so zuverlässig wie den Teil der Datei zu verwenden und an python-magic zu übergeben, denn wenn der Server das richtige Format nicht identifiziert hat und es möglicherweise auf application/octet-stream gesetzt hat. Dies ist häufiger bei Videoformaten, aber Bilder, ich denke Content-Type ist in Ordnung.

Entschuldigung, ich kann keine Statistiken oder Nachforschungen über die Genauigkeit von Content-Type finden. Die vorgeschlagene Antwort, nur einen Teil der Datei herunterzuladen, ist ebenfalls eine gute Option.

Verwandte Themen