日记

好久没有分享过东西,一直在学习状态,学的并不好很多东西都没有,也写了很多demo,后续整理出来在分享,就不分享了,不为什么因为今天周六,好不容易双休,大早上的一个人醒来,刷刷知乎,听音乐、分享一篇简单的东西吧。

切入正题

问题的引入就是有关前端和后端的结合,基于tornado框架怎么上传图片到服务端?

H5、CSS图片上传


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="container">
<form class="form1" method="post" action="/add" enctype="multipart/form-data">
<input type="file" name="file_input" multiple="multiple"/>
<input type="submit" style="width: 100px;height: 40px;font-size: 20px;background-color: rgb(210,210,210)" value="确认增加">
</form>
</div>
</body>
</html> 这里是前端代码:如果不加上 multiple 就只能上传一个文件。enctype="multipart/form-data" 这个是必要的,必须写。

tornado代码


import os
import base64
import tornado.web
import tornado.ioloop
import tornado.options
from tornado.options import options, define
from PIL import Image # 进行tornadao渲染效果
define("port", 8001, type=int, help="this is server port") def img_copy(img_info):
"""
获取前端所传入的图片以及保存到自己本地和数据库各一份。这里以传入三张图比呀哦,你也可以根据需要二修改。
:param img_info:
:return:
"""
img1_name = dict(img_info[0])['filename']
img1_body = dict(img_info[0])['body']
img2_name = dict(img_info[1])['filename']
img2_body = dict(img_info[1])['body']
img3_name = dict(img_info[2])['filename']
img3_body = dict(img_info[2])['body']
all_base64 = [img1_name, img2_name, img3_name]
all_name = [img1_name, img2_name, img3_name]
all_body = [img1_body, img2_body, img3_body]
for i in range(len(all_name)):
with open('./static/person_img/' + all_name[i], 'wb') as f: # 保存到static路径下,这样图片就可以在前端展示了。
f.write(all_body[i])
sourch_path = './static/person_img/' + all_name[i]
im = Image.open(sourch_path)
out = im.resize((300, 300), Image.ANTIALIAS) # 重置图片的大小。
out = out.convert('RGB')
out.save(sourch_path)
# with open(sourch_path, 'rb') as f: #想抓为base64保存到数据库,后期通过数据库展示。
# base64_data = base64.b64encode(f.read())
# s = base64_data.decode()
# infos = 'data:image/jpeg;base64,%s' % s
# all_base64.append(infos)
# return all_base64 class AddHandler(tornado.web.RequestHandler):
"""
添加信息的类对象。
""" def get(self):
self.render('add.html') def post(self):
imgfile = self.request.files.get('file_input')
img_list = img_copy(imgfile) if __name__ == '__main__':
tornado.options.parse_command_line()
# 创建app
app = tornado.web.Application(
handlers=[
(r'/add', AddHandler),
],
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
)
# 创建服务器
server = tornado.httpserver.HTTPServer(app)
# 监听端口下的app
server.listen(options.port)
# 启动服务
tornado.ioloop.IOLoop.instance().start()

项目结构

这是一个图片从前端传入到后台的方法,你可以参考,或许有更好的方法也是未尝不错的。如果可以请给作者留言,作者也去学习学习。今天的分享简单结束了。

来源:https://blog.csdn.net/weixin_42812527/article/details/85012441

最新文章

  1. 使用python的Flask实现一个RESTful API服务器端[翻译]
  2. [MapReduce] Google三驾马车:GFS、MapReduce和Bigtable
  3. ShadowGun Demo学习(非技术向)
  4. [HDOJ5773]The All-purpose Zero(贪心,DP)
  5. IOS开发-UITextField代理常用的方法总结
  6. ABAP ALV DEMO示例源码
  7. centos 安装 mongo3.0
  8. POJ3267 The Cow Lexicon(dp)
  9. C# XML,XmlDocument简单操作实例
  10. Chapter 1 First Sight——22
  11. OSI七层模型学习笔记
  12. 201521123075 《Java程序设计》第13周学习总结
  13. 深入理解Java 栈数据结构
  14. [Android 除錯] Conflict with dependency
  15. golang语言示例
  16. python实现JWT
  17. free mybtis plugin
  18. 如何在C#Asp.Net MVC使用Redis缓存
  19. PHP Kohana入门体验教程
  20. IE浏览器url中带中文报错的问题;以及各种兼容以及浏览器问题总结

热门文章

  1. 隐藏ion-nav-back-button的文字
  2. 01-1制作U盘启动盘--大白菜超级U盘启动盘制作工具
  3. JQuery find函数选择器使用
  4. java消息中间件之ActiveMQ初识
  5. jsp页面JSTL标签 <c:fn:>
  6. Cygwin 版本的 Curl 安装,提取,使用笔记
  7. (二)spark算子 分为3大类
  8. 第一篇: Ansible 介绍
  9. iptables启动脚本分析
  10. Unity Texture2D的sRGB(Color Texture)的作用