1. 上傳的文件request.files拿取html
2. 能夠經過WTForms表單驗證flask
3. 經過secure_filename (from werkzeug.utils import secure_filename ), 驗證文件名稱是否安全安全
4. 驗證完畢的數據直接保存fileobj.save(path,filename)app
5. 拿取數據:send_from_directory(from flask import send_from_directory) return send_from_directory(UPLOAD_PATH,filename)ide
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__) UPLOAD_PATH = os.path.join(os.path.dirname(__file__),'images') @app.route('/upload/',methods=['GET','POST']) def upload(): if request.method == 'GET': return render_template('upload.html') else: form = UploadForm(CombinedMultiDict([request.form,request.files])) #拿到form中驗證 if form.validate(): desc = form.desc.data avatar = form.avatar.data # 拿到驗證完成的對象 filename = secure_filename(avatar.filename) # 驗證名稱 avatar.save(os.path.join(UPLOAD_PATH,filename)) # 保存 print(desc) return '文件上傳成功' else: print(form.errors) return "fail" @app.route('/images/<filename>/') def get_image(filename): return send_from_directory(UPLOAD_PATH,filename) # 發送對象 flaskapp.py
from wtforms import Form,FileField,StringField from wtforms.validators import InputRequired # flask_wtf from flask_wtf.file import FileRequired,FileAllowed class UploadForm(Form): avatar = FileField(validators=[FileRequired(),FileAllowed(['jpg','png','gif'])]) desc = StringField(validators=[InputRequired()])