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中的闭包和装饰器
Jun 12 Python
Python打包可执行文件的方法详解
Sep 19 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
python字符串中的单双引
Feb 16 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
对numpy中数组元素的统一赋值实例
Apr 04 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
Python退出时强制运行一段代码的实现方法
Apr 29 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
php网站地图生成类示例
2014/01/13 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
python机器学习之决策树分类详解
2017/12/20 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
解决Python安装cryptography报错问题
2020/09/03 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
优秀通讯员事迹材料
2014/01/28 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
微电影大赛策划方案
2014/06/05 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
委托证明范本
2014/11/25 职场文书
三好学生个人总结
2015/02/15 职场文书
商务宴会祝酒词
2015/08/11 职场文书
Python Pandas解析读写 CSV 文件
2022/04/11 Python