flask-文件上傳

flask文件上傳

流程

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
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()])
forms.py
相關文章
相關標籤/搜索