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 相关文章推荐
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
Python数组并集交集补集代码实例
Feb 18 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
用python实现学生管理系统
Jul 24 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取进制余数函数代码
2012/01/19 PHP
php使用PDO方法详解
2014/12/27 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
JavaScript 学习点滴记录
2009/04/24 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
业务副厂长岗位职责
2014/01/03 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
表彰会主持词
2014/03/26 职场文书
施工工地安全标语
2014/06/07 职场文书
房屋转让协议书
2014/10/18 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
长城导游词400字
2015/01/30 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers