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访问MySQL封装的常用类实例
Nov 11 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Python实现的knn算法示例
Jun 14 Python
python使用tornado实现简单爬虫
Jul 28 Python
python框架中flask知识点总结
Aug 17 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
浅谈PySpark SQL 相关知识介绍
Jun 14 Python
python中的Elasticsearch操作汇总
Oct 30 Python
Python3 Click模块的使用方法详解
Feb 12 Python
python2 对excel表格操作完整示例
Feb 23 Python
python unichr函数知识点总结
Dec 16 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操作文件方法问答
2007/03/16 PHP
php反射应用示例
2014/02/25 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
javascript multibox 全选
2009/03/22 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
python实现删除文件与目录的方法
2014/11/10 Python
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
序列化Python对象的方法
2020/08/01 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
焊接专业毕业生求职信
2013/10/01 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
健康家庭事迹材料
2014/05/02 职场文书
学校督导评估方案
2014/06/10 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
质检员岗位职责范本
2015/04/07 职场文书
观后感格式
2015/06/19 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS