一:文件上传
1.客户端上传文件到服务端
2.服务端接收并且处理保存
3服务端返回客户端文件
4.客户端接收并解析显示
二.示例代码
服务端代码
注意:根目录下创建files文件夹用于存放客户端上传的文件
tornado_project/test3.py
"""
作者:FM黎明之前
时间:2021/03/06
功能:文件上传
"""
# 导入模块包
import tornado.web
import tornado.ioloop
# 定义文件上传处理类
class UploadHandler(tornado.web.RequestHandler):
# 处理get请求
def get(self, *args, **kwargs):
self.render('templates/upload.html')
# 处理post请求
def post(self, *args, **kwargs):
# 获取文件信息不存在则返回字典
img1 = self.request.files['img1']
# img1 = self.request.files.get('img1')
print(img1)
# img = [{'filename': 'index_ct5.jpg', 'body': b'\xff\xd8\xff\...','content_type': 'image/jpeg'}]
# 遍历img1文件对象
for img in img1:
body = img.get('body', '')
conent_type = img.get('content_type', '')
filename = img.get('filename', '')
# 将图片保存files目录
import os
dir = os.path.join(os.getcwd(), 'files', filename)
# 写入二进制内容
with open(dir, 'wb') as fw:
fw.write(body)
# 设置响应头信息
self.set_header('Content-Type', conent_type)
# 将图片发送到客户端
self.write(body)
# 设置路由并创建应用对象
app = tornado.web.Application([
('/upload/', UploadHandler)
])
# 绑定监听
app.listen(8008)
# 启动监听
tornado.ioloop.IOLoop.instance().start()
客户端代码
tornado_project/templates/upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tornado文件上传功能</title>
</head>
<body>
<form action="/upload/" method="post" enctype="multipart/form-data">
<input type="file" name="img1"/>
<input type="submit" value="图片上传"/>
</form>
</body>
</html>
三.输出
get请求
post请求
注意:服务端报错可能端口占用引起
说明:学习笔记,如果错误,欢迎留言。