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之让人欢喜让人忧的迭代
Oct 02 Python
Python中有趣在__call__函数
Jun 21 Python
深入理解Python装饰器
Jul 27 Python
python复制文件到指定目录的实例
Apr 27 Python
基于python实现简单日历
Jul 28 Python
Python占用的内存优化教程
Jul 28 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
Python计算信息熵实例
Jun 18 Python
django 实现后台从富文本提取纯文本
Jul 02 Python
python 8种必备的gui库
Aug 27 Python
python获取对象信息的实例详解
Jul 07 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
php数组使用规则分析
2015/02/27 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
python实现实时监控文件的方法
2016/08/26 Python
一看就懂得Python的math模块
2018/10/21 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
幼师求职自荐信范文
2014/01/26 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
创优争先心得体会
2014/09/11 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
教师教育心得体会
2016/01/19 职场文书