2009-01-21 14 views
0

Quelqu'un peut-il me aider à repérer mon problème ici:MultiValueDictKeyError En utilisant Appengine SDK et Django pour File Upload

Je suis en train de mettre en œuvre une routine de téléchargement de fichiers en utilisant AppEngine et django, et j'ai rencontré une erreur MultiValueDictKeyError. Il semble que le fichier ne le fasse pas de la page Web au serveur.

Une partie de ceci est un exercice d'apprentissage, donc je ne veux pas utiliser un djangoform pour traiter les données pour moi.

J'utilise, version SDK 1.1.8, version django 1.1.0 alpha et google-AppEngine-django R68

Mon html ressemble à ceci:

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

Mon python ressemble ceci:

def index (demande):

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,})) 

L'erreur ressemble à ceci:

MultiValueDictKeyError à/

" 'imgFile' Clé introuvable dans"

Demande Méthode: POST URL de demande: http://localhost:8000/ Exception Type: MultiValueDictKeyError Exception Valeur: « Key 'imgFile' introuvable dans " Exception Emplacement: /Users/david/Sites/testsite/myapp/views.py dans l'index, ligne 19 Exécutable Python: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python Version Python: 2.5.2

/Users/david/Sites/testsite/myapp/views.py dans l'index blFileData = request.FILES [ 'imgFile']. Read() ... ▼ vars locaux Variable Valeur newtxt
TestModel (** {'txt': u'World ',' img ': Aucun,' titre ': u'Hello'}) demande , POST :, COOKIES: {}, META: {'APPLICATION_ID': 'google -app-engine-django ',' AUTH_DOMAIN ':' gmail.com ',' CONTENT_LENGTH ':' 21 ',' CONTENT_TYPE ':' application/x-www-format-urlencoded ',' CURRENT_VERSION_ID ':' 1.1 ', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/xml, application/xml, application/xhtml + xml, texte/html; q = 0.9, texte/plain; q = 0.8, image/png, * /*;q=0.5 ',' HTTP_ACCEPT_LANGUAGE ':' en ',' HTTP_CONNECTION ':' keep-alive ',' HTTP_HOST ':' localho st: 8000 ',' HTTP_REFERER ':' http://localhost:8000/ ',' HTTP_USER_AGENT ':' Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; fr) AppleWebKit/525.27.1 (KHTML, comme Gecko) Version/3.2.1 Safari/525.27.1 ',' PATH_INFO ': vous'/',' PATH_TRANSLATED ': vous'/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 ':' Développement/1.0 ',' TZ ':' UTC ',' USER_EMAIL ':' ',' wsgi.errors ':', mode 'w' à 0x130b0>, 'wsgi.input':, 'wsgi.multiprocess': False, 'wsgi.multithread': False, 'wsgi.run_once': True, 'wsgi.url_scheme': 'http', 'wsgi.version' : (1, 0)}>

Pensées? Merci, David

Répondre

0

D'accord, la chose la plus étrange est arrivée. J'ai écrit cette question avant de signer hier. Quand j'ai démarré ce soir pour l'essayer à nouveau, la chose a fonctionné avant que j'y fasse des changements. Merci quand même pour l'aide.

1

Pour une raison quelconque le fichier ne se téléchargé, ou le cas échéant, il devient lié à une clé différente à la demande.FICHIERS

Essayez de consigner la valeur de request.FILES ou essayez d'inspecter sa valeur à partir du gestionnaire et de voir ce qui est réellement contenu dans le fichier request.FILES. Cela pourrait conduire à une percée.

Pour définir une trace, vous pouvez utiliser pdb.

import pdb 
pdb.set_trace() 
1

J'ai également fait face à cette erreur, mais c'est parce que j'ai utilisé encoding = "multipart/form-data" qui, je pense, est faux. J'ai changé pour utiliser enctype = "multipart/form-data" et cela fonctionne.