0

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

我在这里读到我应该做类似的事情:

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

对于文档中的文件,我看不到面对这种情况的方法。那里有什么帮助吗?

谢谢。

4

1 回答 1

0

我用 Firefox 进行了测试,并上传了一个带有空文件输入的表单,结果是以下帖子内容:

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

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

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

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

于 2013-08-22T17:43:41.783 回答