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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
跟老齐学Python之不要红头文件(2)
Sep 28 Python
Python网络爬虫实例讲解
Apr 28 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
PyQt实现界面翻转切换效果
Apr 20 Python
基于python实现简单日历
Jul 28 Python
简单了解python反射机制的一些知识
Jul 13 Python
Django CSRF跨站请求伪造防护过程解析
Jul 31 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
Python 必须了解的5种高级特征
Sep 10 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中exec与system用法区别分析
2014/09/22 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
JS 去除Array中的null值示例代码
2013/11/20 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python中的字典遍历备忘
2015/01/17 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
生物科学专业个人求职信范文
2013/12/07 职场文书
会计应届生的自荐信
2013/12/13 职场文书
运动会领导邀请函
2014/01/10 职场文书
九年级语文教学反思
2014/02/04 职场文书
运动会广播稿150字
2014/02/19 职场文书
人事部专员岗位职责
2014/03/04 职场文书
2014植树节活动总结
2014/03/11 职场文书
跳蚤市场口号
2014/06/13 职场文书
委托书怎样写
2014/08/30 职场文书
孩子教育的心得体会
2014/09/01 职场文书
秋收起义观后感
2015/06/11 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
如何写好闭幕词
2019/04/02 职场文书