flask 实现上传图片并缩放作为头像的例子


Posted in Python onJanuary 09, 2020

个人开发的 flask 论坛进入尾声,还剩最后一个上传图片更换头像功能,搞了一整天,最后终于解决了所有问题,现在记录下解决方案。

1. 上传文件

分析一下更换头像功能,我们需要做哪些事,简单的思路是:上传文件,获取文件的 url 。

文件上传的基本原理实际上很简单,基本上是:

一个带有 enctype=multipart/form-data 的 <form> 标记,标记中含有 一个 <input type=file>。

应用通过请求对象的 files 字典来访问文件。

使用文件的 save() 方法把文件永久 地保存在文件系统中。

于是可以得到我们的提供上传按钮的表单页面:

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}SYSUfm - 更换头像{% endblock %}

{% block page_content %}
<div class="page-header">
  <h1>更换你的头像</h1>
</div>
<div class="col-md-4">
  <form action="" method=post enctype=multipart/form-data>
    <input type=file name=file><br/>
    <input type=submit value=Upload>
  </form>
</div>

{% endblock %}

2. 创建略缩图

接下来我们需要有路由到这个页面的视图函数,服务器后台端的代码如下:

@main.route('/edit-avatar', methods=['GET', 'POST'])
@login_required
def change_avatar():
  if request.method == 'POST':
    file = request.files['file']
    size = (40, 40)
    im = Image.open(file)
    im.thumbnail(size)
    if file and allowed_file(file.filename):
      filename = secure_filename(file.filename)
      im.save(os.path.join(main.static_folder, 'avatar', filename))
      current_user.new_avatar_file = url_for('main.static', filename='%s/%s' % ('avatar', filename))
      current_user.is_avatar_default = False
      flash(u'头像修改成功')
      return redirect(url_for('.user', username=current_user.username))
  return render_template('change_avatar.html')

这里 main 是一个 blueprint,file = request.files['file'] 语句获得图片文件对象,将其转换为 Image 对象,通过 thumbnail 方法进行略缩。

最后 im.save(os.path.join(main.static_folder, 'avatar', filename)) 语句将略缩图片保存到服务指定路径。

以上这篇flask 实现上传图片并缩放作为头像的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 简易计算器程序,代码就几行
Aug 29 Python
python生成日历实例解析
Aug 21 Python
python创建一个最简单http webserver服务器的方法
May 08 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
详解flask表单提交的两种方式
Jul 21 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
python实现网站微信登录的示例代码
Sep 18 Python
Python插件机制实现详解
May 04 Python
Python测试框架:pytest学习笔记
Oct 20 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 Python
python中如何使用insert函数
Jan 09 #Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 #Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 #Python
Django密码存储策略分析
Jan 09 #Python
python 实现Flask中返回图片流给前端展示
Jan 09 #Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 #Python
python将图片转base64,实现前端显示
Jan 09 #Python
You might like
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
Python实现统计单词出现的个数
2015/05/28 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
python SOCKET编程基础入门
2021/02/27 Python
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
学生评语大全
2014/04/18 职场文书
体育专业自荐书
2014/05/29 职场文书
2014年征兵标语
2014/06/20 职场文书
火锅店的活动方案
2014/08/15 职场文书
民族学专业大学生职业规划范文:清晰未来的构想
2014/09/20 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
公司离职证明标准格式
2014/11/18 职场文书
继承公证书格式
2015/01/26 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
幸福终点站观后感
2015/06/04 职场文书
指导老师鉴定意见
2015/06/05 职场文书