任何人都可以帮助我发现我的问题:
我正在尝试使用appengine和django实现文件上传例程,我遇到了MultiValueDictKeyError错误。看来文件没有从网页到服务器。
这部分是学习练习,所以我不想使用djangoform为我处理数据。
我正在使用,SDK版本1.1.8,django版本1.1.0 alpha和google-appengine-django r68
我的HTML看起来像这样:
<form method="POST" action="." enctype="multipart/form-data">
Title: <input type="text" name="title"/>
Text: <input type="text" name="txt"/>
Image: <input type="file" name="imgfile"/>
<input type="submit"/>
</form>
我的python看起来像这样:
def index(请求):
if request.POST:
newtxt = TestModel()
newtxt.title = request.POST.get('title', '')
newtxt.txt = request.POST.get('txt', '')
blFileData = request.FILES['imgfile'].read()
if blFileData:
newtxt.img = blFileData
newtxt.put()
return render_to_response('index.html', ({'filestore': query,}))
错误如下所示:
> 中的MultiValueDictKeyError“<'p>中未找到”密钥'imgfile'
请求方法:POST 请求网址:http://localhost:8000/ 异常类型:MultiValueDictKeyError 例外值:“密钥'imgfile'未找到” 例外位置:/Users/david/Sites/testsite/myapp/views.py索引,第19行 Python可执行文件:/ Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python Python版本:2.5.2
索引中的 /Users/david/Sites/testsite/myapp/views.py
blFileData = request.FILES ['imgfile']。read()...
▼本地变种
变量值
newtxt
TestModel(** {'txt':u'World','img':无,'标题':u'Hello'})
请求
,POST:,COOKIES:{},META:{'APPLICATION_ID':'google-app-engine-django','AUTH_DOMAIN':'gmail.com','CONTENT_LENGTH':'21','CONTENT_TYPE':'申请/ x-www-form-urlencoded','CURRENT_VERSION_ID':'1.1','GATEWAY_INTERFACE':'CGI / 1.1','HTTP_ACCEPT':'text / xml,application / xml,application / xhtml + xml,text / html ; q = 0.9,text / plain; q = 0.8,image / png,* / *; q = 0.5','HTTP_ACCEPT_LANGUAGE':'en','HTTP_CONNECTION':'keep-alive','HTTP_HOST':'localhost :8000','HTTP_REFERER':'http://localhost:8000/','HTTP_USER_AGENT':'Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10_4_11; zh)AppleWebKit / 525.27.1(KHTML,类似Gecko)版本/ 3.2.1 Safari / 525.27.1','PATH_INFO':你'/','PATH_TRANSLATED':你'/ Users / david / Sites / testsite / main.py','QUERY_STRING':'','REMOTE_ADDR': '127.0.0.1','REQUEST_METHOD':'POST','SCRIPT_NAME':你','SERVER_NAME':'localhost','SERVER_PORT':'8000','SERVER_PROTOCOL':'HTTP / 1.0','SERVER_SOFTWARE ':'开发/ 1.0','TZ':'UTC','USER_EMAIL':'','wsgi.errors':',模式'w'在0x130b0&gt;,'wsgi.inpu t':,'wsgi.multiprocess':错误,'wsgi.multithread':错误,'wsgi.run_once':是的,'wsgi.url_scheme':'http','wsgi.version':( 1,0)} &GT;
思考? 谢谢, 大卫
答案 0 :(得分:1)
由于某种原因,文件没有上传,或者如果有的话,它被绑定到request.FILES中的另一个键
尝试记录request.FILES的值或尝试从处理程序检查其值,并查看request.FILES dict中实际包含的内容。这可能会带来一些突破。
要设置跟踪,可以使用pdb。
import pdb
pdb.set_trace()
答案 1 :(得分:1)
我也遇到过这个错误,但那是因为我使用 encoding =“multipart / form-data”,我认为这是错误的。我改为使用 enctype =“multipart / form-data”,它确实有效。
答案 2 :(得分:0)
好的,最奇怪的事情发生了。我在昨天签字前写了这个问题。当我今晚启动再次尝试时,在我对其进行任何更改之前,事情已经奏效。无论如何,谢谢你的帮助。