2012-03-25 212 views
1

我怎樣才能讀取上傳的使用形式,在HTML和使用CGI在zip文件中fileitems,我想因爲這樣:閱讀上傳zip文件

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() 

例如,當我上載(test.zip)錯誤是沒有這樣的文件或目錄:'test.zip',如果我運行的代碼沒有這個zfile=zipfile.ZipFile(file_upload.filename,"r"),我得到test.zip不是一個有效的pkzip文件。 在此先感謝。

+1

你爲什麼要傳遞的文件名,而不是文件? – 2012-03-25 20:36:36

+0

@Ignacio Vazquez-Abrams:當我傳遞文件時,我得到了這個錯誤:強制爲Unicode:需要字符串或緩衝區,cStringIO.StringO發現,我在谷歌應用程序引擎中運行我的代碼。 – 2012-03-25 20:39:26

+0

啊,它使用的版本可能不會像文件一樣。 – 2012-03-25 20:40:02

回答

3

您可以嘗試將file_upload.file改爲ZipFile而不是file_upload.filename

下面是打印在壓縮文件的文件列表的腳本:

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()) 

以及相應的HTML表單:

<!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>