我正在尝试使用以下Python CGI函数上传图像:
def save(image):
path = '%s/%s' % ('dir/images', image.filename)
nfile = open(path, 'wb')
while 1:
chunk = image.file.read(2<<16)
if not chunk:
break
nfile.write(chunk)
nfile.close()
它适用于SVG和文本文件,但是当我尝试上传图像(jpeg,png和gif测试)时,生成的文件无法显示,因为它“包含错误”。而且似乎图像确实没有完全上传。 我真的不明白为什么它适用于SVG和TXT,但不适用于图像。
提前多多感谢!
答案 0 :(得分:3)
正如@Lattyware所指出的,这是使用with
的理想时间:(以及其他几个位)
path = os.path.join('dir', 'images', image.filename)
with open(path, 'wb') as fout:
in_chunks = iter(lambda: image.file.read(2 << 16), '')
fout.writelines(in_chunks)
答案 1 :(得分:1)
在Debian上尝试我的脚本后,我发现我的问题肯定是由于Windows的python,因为它在Debian上运行得很好。
为避免在Windows上上传二进制文件时出现截断文件,必须使用-u标志:
#! c:\python27\python.exe -u
它应该修复截断的文件问题。
http://mail.python.org/pipermail/python-list/2007-December/439231.html