如何使用Flask WTF的FileField实际上传文件
在我的 forms.py 文件里,我有
class myForm(Form):
fileName = FileField()
在我的 views.py 文件里,我有
form = myForm()
if form.validate_on_submit():
fileName = secure_filename(form.fileName.file.filename)
在我的 .html 文件里,我有
{% block content %}
<form action="" method="post" name="simple" enctype="multipart/form-data">
<p>
Upload a file
{{form.fileName()}}
</p>
<p><input type="submit" value="Submit"></p>
</form>
{% endblock %}
当我点击提交时,这些似乎都能正常工作,但文件并没有出现在任何项目目录里。
3 个回答
13
在表单的文件名上,调用 '.save' 方法。
filename = secure_filename(form.fileName.file.filename)
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
form.fileName.file.save(file_path)
确保使用 secure_filename() 函数,这样可以防止用户输入一些不安全的文件名,比如 "../../../../home/username/.bashrc" 这样的路径。
使用 os.path.join 可以生成正确的绝对路径,无论你使用的是哪个操作系统。
31
你有没有看过这个:
https://flask.palletsprojects.com/en/2.0.x/patterns/fileuploads/#uploading-files
你需要设置一些配置,比如 UPLOAD_FOLDER 等等。还有,你需要调用 save() 这个函数,但我在你发的 views.py 代码里没看到这个函数。
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
9
我只需要在 form.fileName.file.save 上调用 .save 方法。
myFile = secure_filename(form.fileName.file.filename)
form.fileName.file.save(PATH+myFile)