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用UUID库生成唯一ID的方法示例
Dec 15 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
python list格式数据excel导出方法
Oct 31 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
python 操作hive pyhs2方式
Dec 21 Python
Python动态声明变量赋值代码实例
Dec 30 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
python执行js代码的方法
May 13 Python
pandas提升计算效率的一些方法汇总
May 30 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+Html+缓存
2006/11/25 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
php生成curl命令行的方法
2015/12/14 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
jquery 批量上传图片实现代码
2010/01/28 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
angular2+node.js express打包部署的实战
2017/07/27 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
Python实现LRU算法的2种方法
2015/06/24 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
葡萄牙语专业个人求职信
2013/12/10 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
水电工程师岗位职责
2015/02/13 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python