Tornado--基于H5图片的上传
日记
好久没有分享过东西,一直在学习状态,学的并不好很多东西都没有,也写了很多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
Tornado--基于H5图片的上传的更多相关文章
- Vue directive自定义指令+canvas实现H5图片压缩上传-Base64格式
前言 最近优化项目-手机拍照图片太大,回显速度比较慢,使用了vue的自定义指令实现H5压缩上传base64格式的图片 canvas自定义指令 Vue.directive("canvas&qu ...
- H5图片压缩上传
1.所用到技术 HTML5 API:filereader.canvas 以及 formdata 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的实现.本次使用到的FileRea ...
- Web API之基于H5客户端分段上传大文件
http://www.cnblogs.com/OneDirection/articles/7285739.html 查询很多资料没有遇到合适的,对于MultipartFormDataStreamPro ...
- 基于H5+ API手机相册图片压缩上传
// 母函数 function App(){} /** * 图片压缩,默认同比例压缩 * @param {Object} path * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照 ...
- 基于vue + axios + lrz.js 微信端图片压缩上传
业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...
- 基于HTML5的可预览多图片Ajax上传
一.关于图片上传什么什么的 在XHTML的时代,我们使用HTML file控件上传图片一次只能上传一张.要一次上传多图,做法是借助于flash.例如swfupload.js.可惜,使用复杂的点,比如f ...
- 【转载】【JAVA秒会技术之图片上传】基于Nginx及FastDFS,完成图片的上传及展示
基于Nginx及FastDFS,完成商品图片的上传及展示 一.传统图片存储及展示方式 存在问题: 1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题 2)web应用服务器的 ...
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
- base64格式的图片如何上传到oss
---恢复内容开始--- 对于base64图片的上传这个东西,一直是一个问题尤其是上传到oss.我们这次开发由于需要修剪图片,使用了h5的很多新特性. h5修剪图片,使用了我们的canvas.这个步骤 ...
随机推荐
- 将NSArray反向排序
NSArray * array = [NSArray arrayWithObjects:", nil]; NSArray * reverseArray = [[array reverseOb ...
- Sphinx之配置文件
# # Sphinx configuration file sample # # WARNING! While this sample file mentions all available opti ...
- 挑战--asp.net 文件夹上传
今天遇到一个有趣的问题,公司让平安做一个上传文件夹的功能,这个任务具有一定的挑战性哦.上传文件夹,我第一次看到有人这样做,以前都是上传压缩文件,从来就没有见人上传过文件夹,我也从来就没有尝试过.先不讨 ...
- python 可变参数函数定义* args和**kwargs的用法
python函数可变参数 (Variable Argument) 的方法:使用*args和**kwargs语法.其中,*args是可变的positional arguments列表,**kwargs是 ...
- table中tr的display属性在火狐中显示不正常,IE中显示正常
最近在作项目的时候碰到一个问题,就是需要AJAX来交互显示<tr> </tr> 标签内的东西,按照常理,对于某一单元行需要显示时,使用:display:block属性,不需要显 ...
- excel生成随机数
这个功能可以通过excel来实现,操作步骤如下: 1.新建一个excel,并打开 2.选中一个单元格,在单元格中填写: =20*RAND()+30 确定之后就会发现已经 ...
- 【python】-- 进程与线程
进程与线程 一.概念 1.简述: 计算机,所有的指令的操作都是有CPU来负责的,cpu是来负责运算的.OS(操作系统) 调度cpu的最小单位就是线程.程序启动后,从内存中分一块空间,把数据临时存在内存 ...
- 【python】-- web开发之JavaScript
JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...
- 三款查看class文件结构的工具
classpy JavaClassViewer jclasslib
- 我的Android进阶之旅------> Android应用升级构想和要点总结
广大博友,看过后帮忙顶顶,谢谢大家!!! 转载请注明: http://blog.csdn.net/richway2010/article/details/6408258 [博主:各位博友,网友们,大家 ...