Flask中使用Flask-WTF的FileField()实现文件上传和分片上传功能
发布时间:2024-01-17 12:09:46
在Flask中使用Flask-WTF的FileField()实现文件上传和分片上传功能可以让用户轻松地上传文件并进行处理。下面是一个实现该功能的例子。
首先,导入相关的模块和扩展:
from flask import Flask, render_template, request from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileRequired from werkzeug.utils import secure_filename
然后创建一个Flask应用和配置上传文件存储路径:
app = Flask(__name__) app.config['UPLOAD_FOLDER'] = '/path/to/upload/folder' app.config['SECRET_KEY'] = 'secretkey'
接着,创建一个表单类继承自FlaskForm,并定义一个FileField()字段,在该字段中设置验证规则FileRequired()以确保文件不能为空:
class UploadForm(FlaskForm):
file = FileField(validators=[FileRequired()])
然后定义一个视图函数用于处理上传文件的请求,并渲染一个包含文件上传表单的模板:
@app.route('/upload', methods=['GET', 'POST'])
def upload():
form = UploadForm()
if form.validate_on_submit():
file = form.file.data
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return 'File uploaded successfully'
return render_template('upload.html', form=form)
在模板文件upload.html中,使用Flask-WTF提供的模板渲染宏渲染文件上传表单,并使用Bootstrap美化表单样式:
<!DOCTYPE html>
<html>
<head>
<title>Upload File</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Upload File</h1>
<form method="post" enctype="multipart/form-data" autocomplete="off">
{{ form.hidden_tag() }}
{{ form.file.label }}
{{ form.file }}
{{ form.file.errors }}
<br>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
</div>
</body>
</html>
最后,运行应用:
if __name__ == '__main__':
app.run()
现在,当访问http://localhost:5000/upload时,就可以看到一个文件上传表单。选择一个文件并点击上传按钮,文件将被保存到指定的上传文件夹中,并返回上传成功的提示信息。
使用Flask-WTF的FileField()实现文件上传和分片上传功能可以大大简化文件上传的过程。使用该功能,我们可以轻松地处理用户上传的文件,并进行相应的处理,如验证文件类型、保存到指定路径等。通过使用Flask-WTF提供的验证规则,我们还可以对用户上传的文件进行进一步的验证和限制。
