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中定义结构体的方法
Mar 04 Python
详解Python中的元组与逻辑运算符
Oct 13 Python
Python机器学习之SVM支持向量机
Dec 27 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
python 识别图片中的文字信息方法
May 10 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
python logging模块的使用总结
Jul 09 Python
简单了解python列表和元组的区别
May 14 Python
Python同时迭代多个序列的方法
Jul 28 Python
python简单实现9宫格图片实例
Sep 03 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
selenium+超级鹰实现模拟登录12306
Jan 24 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
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
PHP实现微信退款功能
2018/10/02 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
javascript截取字符串小结
2015/04/28 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
大学生演讲稿
2014/04/25 职场文书
优秀护士演讲稿
2014/04/30 职场文书
大学三年计划书范文
2014/04/30 职场文书
服务理念标语
2014/06/18 职场文书
国企干部对照检查材料
2014/08/22 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python