分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Flask-上传文件和访问上传的文件

发布时间:2023-09-06 02:26责任编辑:胡小海关键词:暂无标签

 1.1.上传文件和访问上传的文件

upload_file_demo.py

from flask import Flask,request,render_templateimport osfrom werkzeug.utils import secure_filenamefrom flask import send_from_directoryapp = 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,StringFieldfrom wtforms.validators import InputRequiredfrom flask_wtf.file import FileRequired,FileAllowedclass 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_templateimport osfrom werkzeug.utils import secure_filenamefrom flask import send_from_directoryfrom forms import UploadFormfrom werkzeug.datastructures import CombinedMultiDictapp = 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)
 

Flask-上传文件和访问上传的文件

原文地址:https://www.cnblogs.com/caodneg7/p/10139995.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved