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从sqlite读取并显示数据的方法
May 08 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
Python利用IPython提高开发效率
Aug 10 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
用python处理图片实现图像中的像素访问
May 04 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
python中import与from方法总结(推荐)
Mar 21 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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
global.php
2006/12/09 PHP
php error_log 函数的使用
2009/04/13 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
QQ登录简单实现代码
2021/03/09 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
python 中split 和 strip的实例详解
2017/07/12 Python
python模拟表单提交登录图书馆
2018/04/27 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
python实现自动清理重复文件
2020/08/24 Python
shell程序中如何注释
2012/02/17 面试题
大学生怎样写好自荐信
2014/02/25 职场文书
法人委托书范本
2014/04/04 职场文书
运动会加油稿100字
2014/09/19 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
小学美术教学反思
2016/02/17 职场文书