Python的Tornado框架实现图片上传及图片大小修改功能


Posted in Python onJune 30, 2016

图片的上传

上传图片使用了表单提交, 下面是html部分, enctype="multipart/form-data"表示不对字节进行编码,上传文件类型时需指定. input标签的 type="file" 指定上传类型.

<form action="/" enctype="multipart/form-data" method="post">
  <input type="file" name="headimg">
</form>

下面是tornado接受文件的部分

class UploadHandler(BaseHandler):
  def post(self):
    # 这部分就是上传的文件,想要查看更多可以print self.request看看
    # 该文件返回一个元素为字典的列表
    imgfile = self.request.files.get('headimg')
    for img in imgfile:
      # img有三个键值对可以通过img.keys()查看
      # 分别是 'filename', 'body', 'content_type' 很明显对应着文件名,内容(二进制)和文件类型
      with open('./static/uploads/' + img['filename'], 'wb') as f:
        # 文件内容保存 到'/static/uploads/{{filename}}'
        f.write(f['body'])

这样就可以通过/static/uploads/文件名的形式访问

对图片大小进行修改

下面将写对图片进行的resize

class UploadHandler(BaseHandler):
  @tornado.web.authenticated
  def post(self):
    # 应该写到上面, 为了显示写到了函数内
    import time
    # PIL 是 python中对图片进行操作的模块, 感兴趣可以去看一下
    from PIL import Image
    # 可以想文件一样使用, 只是存放在内存
    from cStringIO import StringIO

    # 判断上传文件大小
    size = int(self.request.headers.get('Content-Length'))
    if size / 1000.0 > 2000:
      self.write("上传图片不能大于2M.")
    imgfile = self.request.files.get('headimg')
    for img in imgfile:
      # 对文件进行重命名
      name = str(time.strftime('%Y%m%d%'), time.localtime())\
          + '_' + self.current_user + '_headimg.png'

      with open('./static/uploads/' + name, 'wb') as f:
        # image有多种打开方式,一种是 Image.open('xx.png')
        # 另一种就是 Image.open(StringIO(buffer)) 
        im = Image.open(StringIO(img['body']))
        # 修改图片大小resize接受两个参数, 第一个是宽高的元组数据,第二个是对图片细节的处理,本文表示抗锯齿
        im = im.resize((72, 72), Image.ANTIALIAS)
        # 打开io 就像文件一样
        im_file = StringIO()
        im.save(im_file, format='png')
        # 这是获取io中的内容
        im_data = im_file.getvalue() 
        f.write(im_data)

这样就可以上传的时候对文件大小进行修改

Python 相关文章推荐
python计算圆周率pi的方法
Jul 11 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
深入了解Django中间件及其方法
Jul 26 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
Django import export实现数据库导入导出方式
Apr 03 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
利用python查看数组中的所有元素是否相同
Jan 08 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 #Python
在Python中定义和使用抽象类的方法
Jun 30 #Python
Python中functools模块的常用函数解析
Jun 30 #Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 #Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 #Python
django之常用命令详解
Jun 30 #Python
全面了解Python环境配置及项目建立
Jun 30 #Python
You might like
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
php编程每天必学之表单验证
2016/03/01 PHP
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
python打包生成so文件的实现
2020/10/30 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
食堂员工工作职责
2013/12/18 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
工伤调解协议书
2016/03/21 职场文书
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python