在python ccgi中检测未上传的文件

时间:2013-08-22 17:36:09

标签: python forms file cgi optional

我正在尝试检测在提交cgi表单时是否上传了可选文件。

我读过here我应该做的事情:

myfile = form["myfile"]
if myfile.file:
    # It's an uploaded file; save it to disk
    file = open('path_to_file','wb')
    file.write(myfile.file.read())
    file.close()

但这不适合我。无论文件是否已上传,该文件始终都在被写入。

在使用任何其他字段时,我总是可以使用默认值来检查它:

field = cgi.escape(data.getfirst('field','null'))

我无法看到文档中文件面对此问题的方法。有帮助吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我使用Firefox进行了测试,上传带有空文件输入的表单会产生以下帖子内容:

-----------------------------135438447855682763402193870
Content-Disposition: form-data; name="foo"; filename=""
Content-Type: application/octet-stream 

-----------------------------135438447855682763402193870--

因此上传了零长度字段。但是,没有设置文件名,因此请测试filename属性的值。

  

如果字段代表上传的文件,则通过value属性或访问该值   getvalue()方法以字符串形式读取内存中的整个文件。这可能不是你想要的。   您可以通过测试filename属性或文件属性来测试上传的文件。