7.Flask文件上传
1.1.上传文件和访问上传的文件
upload_file_demo.py
from flask import Flask,request,render_template
import os
from werkzeug.utils import secure_filename
from flask import send_from_directory app = Flask(__name__) #新建images文件夹,UPLOAD_PATH就是images的路径
UPLOAD_PATH = os.path.join(os.path.dirname(__file__),'images') @app.route('/upload/',methods=['GET','POST'])
def settings():
if request.method == 'GET':
return render_template('upload.html')
else:
desc = request.form.get('desc')
avatar = request.files.get('avatar')
# 对文件名进行包装,为了安全,不过对中文的文件名显示有问题
filename = secure_filename(avatar.filename)
avatar.save(os.path.join(UPLOAD_PATH,filename))
print(desc)
return '文件上传成功' #访问上传的文件
#浏览器访问:http://127.0.0.1:5000/images/django.jpg/ 就可以查看文件了
@app.route('/images/<filename>/',methods=['GET','POST'])
def get_image(filename):
return send_from_directory(UPLOAD_PATH,filename) @app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run(debug=True)
upload.html
<form action="" method="post" enctype="multipart/form-data">
<table>
<tbody>
<tr>
<td>头像:</td>
<td><input type="file" name="avatar"></td>
</tr>
<tr>
<td>描述:</td>
<td><input type="text" name="desc"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</tbody>
</table>
</form>
1.2.使用flask-wtf验证上传的文件
forms.py
from wtforms import Form,FileField,StringField
from wtforms.validators import InputRequired
from flask_wtf.file import FileRequired,FileAllowed class UploadForm(Form):
avatar = FileField(validators=[FileRequired(), #FileRequired必须上传
FileAllowed(['jpg','png','gif']) #FileAllowed:必须为指定的格式的文件
])
desc = StringField(validators=[InputRequired()])
upload_file_demo.py
from flask import Flask, request, render_template
import os
from werkzeug.utils import secure_filename
from flask import send_from_directory
from forms import UploadForm
from werkzeug.datastructures import CombinedMultiDict app = Flask(__name__) # 新建images文件夹,UPLOAD_PATH就是images的路径
UPLOAD_PATH = os.path.join(os.path.dirname(__file__), 'images') @app.route('/upload/', methods=['GET', 'POST'])
def settings():
if request.method == 'GET':
return render_template('upload.html')
else:
# 文件是从request,files里面获取,这里使用CombinedMultiDict把form和file的数据组合起来,一起验证
form = UploadForm(CombinedMultiDict([request.form, request.files]))
if form.validate():
desc = request.form.get('desc')
avatar = request.files.get('avatar')
# 对文件名进行包装,为了安全,不过对中文的文件名显示有问题
filename = secure_filename(avatar.filename)
avatar.save(os.path.join(UPLOAD_PATH, filename))
print(desc)
return '文件上传成功'
else:
print(form.errors)
return "fail" # 访问上传的文件
# 浏览器访问:http://127.0.0.1:5000/images/django.jpg/ 就可以查看文件了
@app.route('/images/<filename>/', methods=['GET', 'POST'])
def get_image(filename):
return send_from_directory(UPLOAD_PATH, filename) @app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run(debug=True)
7.Flask文件上传的更多相关文章
- Flask插件wtforms、Flask文件上传和Echarts柱状图
一.wtforms 类比Django的Form组件Form组件的主要应用是帮助我们自动生成HTML代码和做一些表单数据的验证 flask的wtforms用法跟Form组件大同小异参考文章:https: ...
- flask 文件上传(单文件上传、多文件上传)
文件上传 在HTML中,渲染一个文件上传字段只需要将<input>标签的type属性设为file,即<input type=”file”>. 这会在浏览器中渲染成一个文件上传字 ...
- 16、Flask实战第16天:Flask文件上传
上传文件 这里以图片来演示flask如何上传文件 首先来写个简单的前端页面upload.html, 在里面写个文件上传的表单 后端debug断点调试 获取到文件后,当然,我们需要把文件保存下来.在项目 ...
- 五十七:flask文件上传之使用flask-wtf验证上传的文件
1.安装:pip install flask-wtf2.定义表单验证的时候,对文件的字段,需使用:FileField3.验证器从flask_wtf.file中导入,FileRequired为验证文件必 ...
- 五十六:flask文件上传之上传文件与访问上传的文件
实现上传文件 1.在form表单中,需指定enctype="multipart/form-data",且文件上传的input标签type="file"2.在后台 ...
- flask文件上传
#coding=utf-8 import os from flask import Flask from flask import request from flask import redirect ...
- 测试开发实战[提测平台]17-Flask&Vue文件上传实现
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 先回顾下在此系列第8次分享给出的预期实现的产品原型和需求说明,如下图整体上和前两节实现很相似,只不过一般测试报告要写的内容可能比较多,就多 ...
- 【Flask】 结合wtforms的文件上传表单
表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...
- flask完成文件上传功能
在使用flask定义路由完成文件上传时,定义upload视图函数 from flask import Flask, render_template from werkzeug.utils import ...
随机推荐
- JavaScript的垃圾回收机制
JavaScript语言是一门优秀的脚本语言.其中包含脚本语言的灵活性外还拥有许多高级语言的特性.例如充许构建和实例化一个对象,垃圾回收机制(GC:Garbage Collecation).通常我们使 ...
- plugin.go 源码阅读
, nil) } if c.client != nil { c.client.Close() } ...
- 如何使用Docker部署一个Go Web应用程序
熟悉Docker如何提升你在构建.测试并部署Go Web应用程序的方式,并且理解如何使用Semaphore来持续部署. 简介 大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版 ...
- 【bzoj 3131】[Sdoi2013]淘金
Description 小Z在玩一个叫做<淘金者>的游戏.游戏的世界是一个二维坐标.X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共N*N块. 一阵风吹 ...
- noip前集训
10.18 关网了,2333 上午考试,130 rank16 一直在刚T2的割点,却直接弃了一道第一眼看上去不可做但实际并没那么难想的小模拟 但是T2没搞出来是不是也要反思一下,先是割点板子忘了,之后 ...
- BZOJ_3239_Discrete Logging_BSGS
BZOJ_3239_Discrete Logging_BSGS 题意:Given a prime P, 2 <= P < 231, an integer B, 2 <= B < ...
- setContentType与setCharacterEncoding的区别
setCharacterEncoding只是设置字符的编码方式 setContentType除了可以设置字符的编码方式还能设置文档内容的类型 1.setCharacterEncoding respon ...
- C语言文件 "w+"与"wb+"区别
这是我今天碰到的问题,现在已经解决, 希望我的整理能够帮助到你们! w+以纯文本方式读写,而wb+是以二进制方式进行读写. mode说明: w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会 ...
- supervisord supervisorctl 问题supervisor.sock refused connection
如果supervisord挂了的话,提示supervisor.sock refused connection. ,重新启动命令为supervisord 常用命令: supervisord -c /et ...
- 企业私有源代码上传github致入侵之大疆案判决了
事件简单回顾: 1.2017年8月28日,大疆宣布“大疆威胁识别奖励计划”,最高3万美元: 2.然而在此之前,大疆农业事业部某员工将企业私有源代码上传到了github: 3.就职于大疆竞对公司Depa ...