上传后图片包含错误

时间:2012-12-16 22:18:56

标签: python image upload cgi

我正在尝试使用以下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,但不适用于图像。

提前多多感谢!

2 个答案:

答案 0 :(得分:3)

嗯,所以任何低于131072字节的东西都可能有效。但是更大的东西,有第一个块写入文件,文件然后关闭。所以在下一次迭代中,输出文件句柄已关闭,因此无法写入。

正如@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