2012-03-25 4 views
1

Wie kann ich die fileitems in Zip-Datei lesen, die Form in html mit hochgeladen und mit Cgi, i, wie dies versucht:Lesen hochgeladen Zip-Datei

form = cgi.FieldStorage() 
file_upload = form['file'] 
if zipfile.is_zipfile(file_upload.filename): 
    print "%s is a valid pkzip file" % file_upload.filename 
else: 
    print "%s is not a valid pkzip file" % file_upload.filename 
zfile=zipfile.ZipFile(file_upload.filename,"r") 
files_zip=zfile.namelist() 

Zum Beispiel, wenn ich den Fehler laden (test.zip) Ist keine solche Datei oder Verzeichnis: "test.zip", und wenn ich den Code ohne diese zfile=zipfile.ZipFile(file_upload.filename,"r") ausführen, bekomme ich das test.zip ist keine gültige PKZIP-Datei. Vielen Dank im Voraus.

+1

Warum Sie die Dateinamen anstelle der Datei sind vorbei? –

+0

@Ignacio Vazquez-Abrams: Wenn ich die Datei passiere, habe ich diesen Fehler: Coercing nach Unicode: brauche Zeichenfolge oder Puffer, cStringIO.StringO gefunden, lief ich meinen Code in Google App-Engine. –

+0

Ah, die Version, die es verwendet, nimmt wahrscheinlich noch keine dateiähnliche Datei. –

Antwort

3

Sie könnten versuchen, file_upload.file an ZipFile statt file_upload.filename zu übergeben.

Hier ist ein Skript, das die Liste der Dateien in der Zip-Datei druckt:

import sys 
sys.stderr = sys.stdout 
print "Content-Type: text/plain" 
print 

import cgi 
import zipfile 

form = cgi.FieldStorage() 

filefield = form['somefile'] 
print "Filename:", filefield.filename 

if filefield.file is not None and zipfile.is_zipfile(filefield.file): 
    zfile = zipfile.ZipFile(filefield.file) 
    print "Name list:\n\t", 
    print "\n\t".join(zfile.namelist()) 

und das entsprechende HTML-Formular:

<!DOCTYPE html> 
<form enctype="multipart/form-data" action="file-upload" method=post> 
<p><label for=somefile>File: <input type=file name=somefile> 
<p><input type=submit> 
</form>