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