重要的事情是,你必须建立正确cgi.FieldStorage从原始发布的数据如
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
后,很容易倾倒的文件,这里是一个简单的处理器,其显示了do_GET形式上传任何文件中的用户选择,当表单被提交保存该文件到/ tmp中do_POST
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import cgi
class StoreHandler(BaseHTTPRequestHandler):
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
filename = form['file'].filename
data = form['file'].file.read()
open("/tmp/%s"%filename, "wb").write(data)
self.respond("uploaded %s, thanks"%filename)
def do_GET(self):
response = """
File:
"""
self.respond(response)
def respond(self, response, status=200):
self.send_response(status)
self.send_header("Content-type", "text/html")
self.send_header("Content-length", len(response))
self.end_headers()
self.wfile.write(response)
另外请注意self.respond不是我刚添加的标准方法,用于快速返回一些响应。