2012-03-25 160 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>