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 Tkinter基础控件用法
Sep 03 Python
Python的Urllib库的基本使用教程
Apr 30 Python
Python中你应该知道的一些内置函数
Mar 31 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
python实现SOM算法
Feb 23 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
Jun 02 Python
python主要用于哪些方向
Jul 05 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统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
python getopt 参数处理小示例
2009/06/09 Python
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python中的引用知识点总结
2019/05/20 Python
python中的colorlog库使用详解
2019/07/05 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Hibernate持久层技术
2013/12/16 面试题
企业管理部经理岗位职责
2013/12/24 职场文书
司仪主持词两篇
2014/03/22 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
商务邀请函
2015/01/30 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
竞聘书的秘诀
2019/04/02 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
解决Python字典查找报Keyerror的问题
2021/05/26 Python
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android