欢迎访问宙启技术站
智能推送

PythonFlask-WTF文件批量上传功能实现

发布时间:2023-12-11 06:16:31

在Python Flask中实现文件的批量上传功能可以使用Flask-WTF扩展库,该库提供了方便的表单处理功能。下面是一个实现文件批量上传功能的例子。

首先,确保已经安装了Flask和Flask-WTF库:

pip install Flask
pip install Flask-WTF

然后,创建一个Flask应用:

from flask import Flask, render_template, flash, request, redirect, url_for
from flask_wtf import FlaskForm
from werkzeug.utils import secure_filename
from wtforms import FileField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['UPLOAD_FOLDER'] = 'uploads/'

# 创建一个文件上传表单类
class UploadForm(FlaskForm):
    files = FileField('Files', validators=[DataRequired()])
    submit = SubmitField('Upload')

# 定义文件上传路由
@app.route('/', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        files = request.files.getlist('files')
        for file in files:
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(app.config['UPLOAD_FOLDER'] + filename)
        flash('Files uploaded successfully!')
        return redirect(url_for('upload'))

    return render_template('upload.html', form=form)

# 设置允许上传的文件类型
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

if __name__ == '__main__':
    app.run(debug=True)

上述代码中,首先导入所需的模块和库。然后,在Flask应用中定义了一个上传表单类UploadForm,其中包含一个文件字段files和一个提交按钮submit。接下来,创建一个文件上传的路由/,在该路由中,首先实例化表单类UploadForm,然后通过request.files.getlist('files')获取上传的文件列表,遍历文件列表并保存文件到指定文件夹。最后,通过flash函数显示成功上传的消息,并重定向到上传页面。

在HTML模板中,使用render_template函数渲染上传表单,并通过{% for file in form.files %}循环渲染表单中的文件字段。

<!DOCTYPE html>
<html>
<head>
    <title>File Upload</title>
</head>
<body>
    <h1>File Upload</h1>
    {% with messages = get_flashed_messages() %}
        {% if messages %}
            <ul class="messages">
                {% for message in messages %}
                    <li>{{ message }}</li>
                {% endfor %}
            </ul>
        {% endif %}
    {% endwith %}
    <form method="POST" enctype="multipart/form-data">
        {{ form.hidden_tag() }}
        {{ form.files() }}
        {{ form.submit() }}
    </form>
</body>
</html>

最后,运行该应用并访问上传页面即可实现文件的批量上传功能。

这是一个简单的文件批量上传功能实现的例子,使用了Flask-WTF库提供的表单处理功能。你可以根据自己的需求进行扩展和修改。