#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import os #Python的标准库中的os模块包含普遍的操作系统功能
import re #引入正则表达式对象
import urllib #用于对URL进行编解码
if sys.version_info < (3, 0):
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler #导入HTTP处理相关的模块
else :
from http.server import HTTPServer, BaseHTTPRequestHandler
import cgi #文件上传处理
import base64 #base64编码
from io import BytesIO #本地文件读取
#自定义处理程序,用于处理HTTP请求
class EasyHTTPHandler(BaseHTTPRequestHandler):
def do_RespHtml(self, html):
self.protocal_version = 'HTTP/1.1' #设置协议版本
self.send_response(200) #设置响应状态码
self.send_header("Welcome", "Contect") #设置响应头
self.end_headers()
if sys.version_info >= (3, 0):
html = html.encode('utf-8')
self.wfile.write(html) #输出响应内容
def do_ImageHtml(self, img):
templateStr = '''
<html>
<head>
<title>EasyHttpServer</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form enctype="multipart/form-data" method="post">
选择图片:<input type="file" name="uploadImage" id="uploadImage" accept="image/png, image/jpeg">
<input type="submit" value="识别">
</form>
<div>{0}</div>
</body>
</html>
'''.format(img)
self.do_RespHtml(templateStr)
def do_FileRecv(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
}
)
imageHtml = ""
for field in form.keys():
field_item = form[field]
filename = field_item.filename
filevalue = field_item.value
filesize = len(filevalue)#文件大小(字节)
#print len(filevalue)
#print (filename)
ext = os.path.splitext(filename)[1]
if sys.version_info >= (3, 0):
filename = filename.encode('utf-8')
with open(filename, 'wb') as f:
f.write(filevalue)
#将图片保存到内存中
f = BytesIO()
with open(filename, 'rb') as img:
f.write(img.read())
#从内存中取出bytes类型的图片
data = f.getvalue()
#将bytes转成base64
data = base64.b64encode(data).decode()
imageHtml += "<p> <image width='200px' src='data:image/" + ext + ";base64," + data + "'/> </p>"
self.do_ImageHtml(imageHtml)
def doIndexHtml(self):
#获取URL
#print 'URL=',self.path
#页面输出模板字符串
templateStr = '''
<html>
<head>
<title>EasyHttpServer</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form enctype="multipart/form-data" method="post">
选择图片:<input type="file" name="uploadImage" id="uploadImage" accept="image/png, image/jpeg">
<input type="submit" value="上传">
</form>
</body>
</html>
'''
self.do_RespHtml(templateStr)
#处理GET请求
def do_GET(self):
self.doIndexHtml()
#处理POST请求
def do_POST(self):
self.do_FileRecv()
#启动服务函数
def start_server(port):
http_server = HTTPServer(('', int(port)), EasyHTTPHandler)
http_server.serve_forever() #设置一直监听并接收请求
#os.chdir('static') #改变工作目录到 static 目录
start_server(8000) #启动服务,监听8000端口
参考链接