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库提供的表单处理功能。你可以根据自己的需求进行扩展和修改。
