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

在Flask中使用FileField()实现多文件上传功能

发布时间:2024-01-17 12:06:55

在Flask中,可以使用FileField()来实现多文件上传功能。FileField()wtforms库提供的一个表单字段,用于处理文件上传。

以下是一个使用FileField()实现多文件上传功能的例子:

首先,需要安装必要的依赖库:

pip install flask
pip install wtforms
pip install flask-wtf

然后,创建一个名为app.py的Python文件,并在其中编写如下代码:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed, FileRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret_key'  # 设置表单密钥,用于csrf保护

class UploadForm(FlaskForm):
    files = FileField('Files', validators=[FileRequired(), FileAllowed(['jpg', 'jpeg', 'png'], 'Only image files are accepted!')])

@app.route('/', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        filenames = []
        for file in form.files.data:
            file.save(f'uploads/{file.filename}')
            filenames.append(file.filename)
        return f'Files {", ".join(filenames)} uploaded successfully!'
    return render_template('upload.html', form=form)

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

在上述代码中,我们首先导入所需的库,包括FlaskFlaskFormFileField。然后,创建一个名为UploadForm的表单类,其中包含一个名为filesFileField字段。FileRequired()用于确保至少选择了一个文件,而FileAllowed()则用于限制文件类型为图像文件。

upload()视图函数中,我们实例化UploadForm类,并在表单成功验证的情况下,保存上传的每个文件到本地,并将文件名添加到filenames列表中。最后,我们在保存完所有文件后,通过渲染一个简单的HTML模板,将文件名返回给用户。

接下来,我们需要创建一个名为upload.html的HTML模板文件,并在其中编写如下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Multiple File Upload</title>
</head>
<body>
    <h1>Multiple File Upload</h1>
    <form method="POST" enctype="multipart/form-data">
        {{ form.csrf_token }}
        {{ form.files.label }} {{ form.files.multiple }}
        {{ form.files(errors=form.errors.get('files')) }}
        <input type="submit" value="Upload">
    </form>
</body>
</html>

在上述HTML模板中,我们创建了一个包含文件上传表单的简单网页。通过使用{% ... %}语法,我们将表单字段的标签、多选属性和实际输入字段渲染到网页中。通过使用errors=form.errors.get('files'),我们可以获取并显示与文件上传字段相关的任何错误消息。

最后,我们可以运行app.py文件,并通过浏览器访问http://localhost:5000/来上传多个文件。

总结:

在Flask中,使用FileField()可以方便地实现多文件上传功能。通过使用FlaskForm来创建表单类,我们可以定义哪些类型的文件可以被上传,并且可以方便地处理和保存上传的文件。

以上是一个使用FileField()实现多文件上传功能的例子,你可以根据自己的需求调整代码。