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编写简单网络爬虫抓取视频下载资源
Nov 04 Python
Python中__name__的使用实例
Apr 14 Python
python制作企业邮箱的爆破脚本
Oct 05 Python
Python处理XML格式数据的方法详解
Mar 21 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
Python如何使用OS模块调用cmd
Feb 27 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
python 多态 协议 鸭子类型详解
Nov 27 Python
Python与C++中梯度方向直方图的实现
Mar 17 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
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
使用rollup打包JS的方法步骤
2018/12/05 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
python wsgiref源码解析
2021/02/06 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
银行实习人员自我鉴定
2013/09/22 职场文书
简历的自荐信
2013/12/19 职场文书
空乘英文求职信
2014/04/13 职场文书
公务员培的训心得体会
2014/09/01 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL