2010-07-14 73 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 2010-07-14 16:19:30

+0

你有沒有想過出了什麼問題?我有完全相同的問題 – JackalopeZero 2011-11-24 09:30:14

回答

1

編輯:完全錯過了你所在的部分doing keep_blank_values = 1;對不起,不知道什麼是錯的。

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

包含空字符串

表單域被忽略,並且不會出現在字典中;要保留這些值,請在創建FieldStorage實例時爲可選的keep_blank_values關鍵字參數提供真實值。

因此,發生這種情況是因爲此字段留空。

+0

是的,我仍然不知道爲什麼我得到Keyerror。 難道還有其他問題嗎? – ssdesign 2010-07-14 17:18:39

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處理程序,並試圖序列化,然後將其發佈到我的Python處理程序,我繞過這一點,這是將所有的罰款,所以你也應該嘗試一下。

0

檢查您的表單操作網址中是否沒有GET參數。 如果您需要傳遞任何數據,則將其作爲表單內的表單元素與您的上傳文件一起發佈。 然後你可以在cgi.FieldStorage找到你所有的變速器。