2010-07-14 2 views
2

Что не так в этом коде?Загрузка файла на Python "KeyError"

Вот мой 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' 
+0

Возможно, вы не загрузили файл? – zvone

+0

Вы когда-нибудь выясняли, что случилось? Im имея точно такой же вопрос – JackalopeZero

ответ

1

Редактировать: Полностью пропустил ту часть, где вы находитесь doing keep_blank_values = 1; извините, не знаю, что не так.

От http://docs.python.org/library/cgi.html:

Поля формы, содержащее пустые строки игнорируется и не появляется в словаре; чтобы сохранить такие значения, предоставить истинное значение для необязательного параметра ключевого слова keep_blank_values ​​при создании экземпляра FieldStorage.

Следовательно, это происходит потому, что это поле было пустым.

+0

да, я все еще не могу понять почему я получаю Keyerror. Может ли что-то еще не так? – ssdesign

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> 

Я также использовал обработчик JQuery для моей формы и пытается сериализовать его, а затем разместить его в мой обработчик питона, я обошел это, и это происходит все в порядке, поэтому вы также должны попробовать это.

0

Проверьте, нет ли у вас параметров GET в URL-адресе вашей формы. Если вам нужно передать какие-либо данные, поместите их как элементы формы внутри формы, которая будет отправляться вместе с вашим загружаемым файлом. Затем вы найдете все свои POSTed vars в cgi.FieldStorage.