0

ここで私の問題を見つけるのを手伝ってくれる人はいますか:

appengine と django を使用してファイル アップロード ルーチンを実装しようとしていますが、MultiValueDictKeyError エラーが発生しました。ファイルが Web ページからサーバーに送信されていないようです。

これの一部は学習演習であるため、djangoform を使用してデータを処理したくありません。

私が使用している、SDK バージョン 1.1.8、django バージョン 1.1.0 アルファ、および 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は次のようになります:

デフインデックス(リクエスト):

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

"キー 'imgfile' が見つかりません"

リクエスト方法: POST リクエスト URL: http://localhost:8000/ 例外タイプ: MultiValueDictKeyError 例外値: "Key 'imgfile' not found in " 例外の場所: /Users/david/Sites/testsite/myapp/views.py in index 、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 in index blFileData = request.FILES['imgfile'].read() ... ▼ローカル変数 変数値 newtxt
TestModel(**{'txt': u' World', 'img': None, 'title': u'Hello'}) request , POST:, COOKIES:{}, META:{'APPLICATION_ID': 'google-app-engine-django', 'AUTH_DOMAIN': 'gmail.com', 'CONTENT_LENGTH': '21', 'CONTENT_TYPE': 'application/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': 'キープアライブ', 'HTTP_HOST': 'localhost:8000', 'HTTP_REFERER': ' http://localhost:8000/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit/525.27.1 (Gecko のような KHTML) バージョン/3.2.1 Safari/525.27.1', 'PATH_INFO': u'/', 'PATH_TRANSLATED': u'/Users/david/Sites/testsite/main.py', 'QUERY_STRING': '', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'POST', 'SCRIPT_NAME': u'', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8000', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': '開発/1.0', 'TZ': 'UTC ', 'USER_EMAIL': '', 'wsgi.errors': ', モード 'w' at 0x130b0>, 'wsgi.input': , 'wsgi.multiprocess': False, 'wsgi.multithread': False, 'wsgi .run_once': True, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}>

考え?ありがとう、デビッド

4

3 に答える 3

1

私もこのエラーに直面しましたが、これはencoding="multipart/form-data"を使用したためです。これは間違っていると思います。enctype="multipart/form-data"を使用するように変更しましたが、動作します。

于 2009-11-10T16:43:02.577 に答える
1

何らかの理由でファイルがアップロードされていないか、アップロードされたとしても、request.FILES で別のキーにバインドされています。

request.FILES の値をログに記録するか、ハンドラーからその値を調べて、request.FILES dict に実際に何が含まれているかを確認してください。それが何かの突破口になるかもしれません。

トレースを設定するには、pdb を使用できます。

import pdb
pdb.set_trace()
于 2009-01-21T06:26:23.347 に答える
0

さて、最も奇妙なことが起こりました。昨日サインオフする前にこの質問を書きました。今夜起動してもう一度試してみると、変更を加える前に機能しました。とにかく助けてくれてありがとう。

于 2009-01-22T01:54:04.753 に答える