Python文件上传“KeyError”

时间:2010-07-14 16:12:06

标签: python file-upload cgi

这段代码怎么了?

这是我的HTML:

<html><body>
<form action="iindex.py" method="POST" enctype="multipart/form-data">
<p>File: <input type="file" name="ssfilename"></p>
<p><input type="submit" value="Upload" name="submit"></p>
</form>
</body></html>

这是我的Python脚本:

#! /usr/bin/env python
import os, sys;
from mod_python import apache
import cgi
import cgitb; cgitb.enable()

form = cgi.FieldStorage(keep_blank_values=1)
fileitem = form["ssfilename"]
.....

这是我得到KeyError的行。

File "/Applications/MAMP/python/framework/Python.framework/Versions/2.6/lib/python2.6/cgi.py", line 541, in __getitem__
raise KeyError, key

KeyError: 'ssfilename'

3 个答案:

答案 0 :(得分:1)

编辑:完全错过了您所在的部分doing keep_blank_values = 1;对不起,不知道出了什么问题。

来自http://docs.python.org/library/cgi.html

  

包含空字符串的表单字段将被忽略,并且不会出现在字典中;要保留这些值,请在创建FieldStorage实例时为可选的keep_blank_values关键字参数提供真值。

因此,发生了这种情况,因为此字段留空了。

答案 1 :(得分:0)

我遇到了完全相同的问题,请确保将“enctype”设置为“multipart / form-data”并在字段中使用默认值。所以你的表单应该是这样的:

<form enctype="multipart/form-data" id="addFile" action="AddFile.py">
<input type="file" name="file" id="file" value=""/><br/> 
<input type="submit" name="submit" value="Add File"/><br/>
</form>

我还在为我的Form使用JQuery处理程序,并尝试将其序列化,然后将其发布到我的python处理程序,我绕过它并且它一切都很好,所以你也应该尝试。

答案 2 :(得分:0)

检查表单操作URL中是否没有GET参数。 如果您需要传递任何数据,请将其作为表单元素放在要与您的上传文件一起发布的表单中。 然后,您在cgi.FieldStorage中找到所有已发布的变量。