使用Flask-WTF的FileField()上传文件并获取文件路径
Flask-WTF是一个方便的扩展,用于在Flask应用程序中使用WTForms库进行表单处理。其中一个功能是FileField(),它允许用户通过Web界面上传文件。
首先,需要安装Flask-WTF库。可以通过以下命令使用pip安装:
pip install Flask-WTF
接下来,创建一个Flask应用程序,并导入所需的模块:
from flask import Flask, render_template from flask_wtf import FlaskForm from wtforms import FileField from flask_wtf.file import FileAllowed, FileRequired
然后,配置Flask应用程序:
app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key'
接下来,定义一个表单类,使用FileField()接收文件的上传:
class FileUploadForm(FlaskForm):
file = FileField('Upload file', validators=[FileRequired(), FileAllowed(['csv'], 'CSV files only!')])
上述代码中,'Upload file'是字段的标签,[FileRequired(), FileAllowed(['csv'], 'CSV files only!')]是验证器,确保上传的文件不能为空且必须是.csv文件。
然后,创建一个视图函数,用于呈现表单和处理表单提交:
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
form = FileUploadForm()
if form.validate_on_submit():
file = form.file.data
file_path = 'path/to/save/files' + file.filename
file.save(file_path)
return 'File uploaded successfully!'
return render_template('upload.html', form=form)
在上述代码中,form.validate_on_submit()用于在表单提交时自动验证数据,并返回True或False。如果表单通过验证,可以通过form.file.data获取上传的文件对象,然后通过file.save(file_path)方法保存文件。请记得替换'path/to/save/files'为你想要保存文件的目录。
最后,创建一个模板文件upload.html,用于呈现表单:
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h1>Upload a CSV file</h1>
<form method="POST" enctype="multipart/form-data">
{{ form.hidden_tag() }}
{{ form.file.label }}<br>
{{ form.file }}<br><br>
<input type="submit" value="Upload">
</form>
</body>
</html>
上述代码中,{{ form.hidden_tag() }}用于添加一些隐藏的字段,确保表单的安全性。{{ form.file.label }}用于显示字段的标签,{{ form.file }}用于显示文件选择按钮。
至此,已经完成了使用Flask-WTF的FileField()上传文件并获取文件路径的示例。通过运行Flask应用程序并访问http://localhost:5000/upload,可以看到一个简单的表单,用于上传.csv文件。上传的文件将保存在指定的路径中,并打印出"File uploaded successfully!"消息。
注意:在实际生产环境中,需要进行更多的文件验证和安全性措施。例如,检查文件类型、大小和文件名,以防止恶意文件上传和其他安全漏洞。
