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 实现插入排序算法
Jun 05 Python
Python 列表(List)操作方法详解
Mar 11 Python
跟老齐学Python之复习if语句
Oct 02 Python
Python上传package到Pypi(代码简单)
Feb 06 Python
python数据预处理之将类别数据转换为数值的方法
Jul 05 Python
关于Django外键赋值问题详解
Aug 13 Python
pycharm设置注释颜色的方法
May 23 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
python编辑用户登入界面的实现代码
Jul 16 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
python实现邮件发送功能
Aug 10 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 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树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
python查看微信好友是否删除自己
2016/12/19 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
python实现多进程代码示例
2018/10/31 Python
Python 多维List创建的问题小结
2019/01/18 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
Python如何定义接口和抽象类
2020/07/28 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
法院实习人员自我鉴定
2013/09/26 职场文书
移交协议书
2014/08/19 职场文书
初中作文评语集锦
2014/12/25 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书