Загрузка файла Python "KeyError" - PullRequest
2 голосов
/ 14 июля 2010

Что не так в этом коде?

Вот мой 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"]
.....

Это строка, где яget 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 ]

1 голос
/ 14 июля 2010

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

С http://docs.python.org/library/cgi.html:

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

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

0 голосов
/ 06 декабря 2013

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

0 голосов
/ 10 июля 2012

У меня была точно такая же проблема, убедитесь, что у вас установлено значение "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 для своей формы и пытался его сериализовать, а затем отправлял в свой обработчик python, я обошел это и все шлохорошо, так что вы должны попробовать это тоже.

...