我有一个用Python编写的HTTP服务器,它处理来自curl的文件上传请求
class HTTPRequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
if re.search('/api/v1/addphoto', self.path):
form_data=cgi.FieldStorage()
file_data=form_data['photofile'].value
# Next I will save this file
# fp =open('some/file','wb')
# fp.write(file_data)
# fp.close()
现在我必须使用curl发送请求,命令是
^{pr2}$但是服务器报告错误
File "./apiserver.py", line 21, in do_POST
file_data=form_data['photofile'].value
File "/usr/lib/python2.7/cgi.py", line 541, in __getitem__
raise KeyError, key
KeyError: 'photofile'
这里有什么问题?在
在字典中找不到键时引发KeyError。在
我不熟悉cgi.FieldStorage公司但是我想你应该得到一个字典,但是键
'photofile'
不见了。 只需打印整个表单数据并查看其内容。在您可以使用
form_data.get('photofile', '')
来获取默认值并避免异常。在顺便说一下,对于写入文件,可以使用
with
语句作为上下文管理器。在好的,我从here找到原因和方法。在
原因是“你不能像那样在服务器代码中嵌入CGI代码。CGIHTTPServer(以及一般的CGI)的要点是它在指定的目录中执行单独的脚本并返回输出。因为您重写了do\u POST方法,所以解析表单数据的代码从未被调用过(实际上,我打印表单数据,它是空的-“
None, None, []
”)。在要修复它,请使用传入参数(details)
相关问题 更多 >
编程相关推荐