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实现给文件添加内容及得到文件信息的方法
May 28 Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
Python切片操作深入详解
Jul 27 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
在pycharm中设置显示行数的方法
Jan 16 Python
简单了解Python matplotlib线的属性
Jun 29 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
tornado+celery的简单使用详解
Dec 21 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 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类声明和php类使用方法示例分享
2014/03/29 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
js分页工具实例
2015/01/28 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
js实现随机点名
2021/01/19 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
python if not in 多条件判断代码
2016/09/21 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
Python之用户输入的实例
2018/06/22 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
python math模块的基本使用教程
2021/01/16 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
学年末自我鉴定
2014/01/21 职场文书
责任心演讲稿
2014/05/14 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
大学生个人总结范文
2015/02/15 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python