class AddProductForm(FlaskForm):
product_pictures = MultipleFileField('Pictures')
submit = SubmitField('Add Pictures')
def product_add_pics():
form = AddProductForm()
if form.validate_on_submit():
if form.product_pictures.data:
for picture_upload in form.product_pictures.data:
print(type(picture_upload))
形成:
<div class="form-group">
{{ form.product_pictures.label() }}
{{ form.product_pictures(class="form-control-file") }}
{% if form.product_pictures.errors %}
{% for error in form.product_pictures.errors %}
<span class="text-danger">{{ error }}</span>
{% endfor %}
{% endif %}
</div>
我总是以字符串的形式输入。如何获取二进制文件?我从wtforms使用MultipleFileField。
最佳答案
FileField
类的documentation具体说明了有关处理文件内容的以下内容:
默认情况下,该值将是在表单数据中发送的文件名。
WTForms不处理框架的文件处理功能。
这同样适用于MultipleFileField
类。
这意味着您将不得不向flask
询问这些文件。而且,最快的方法是对要处理的请求使用request.files
。
总之,您将需要重写product_add_pics
函数以从request
对象获取文件,如下所示:
from flask import request
def product_add_pics():
form = AddProductForm()
if form.validate_on_submit():
pics = request.files.getlist(form.product_pictures.name)
if pics:
for picture_upload in pics:
picture_contents = picture_upload.stream.read()
print(type(picture_contents))
# Do everything else you wish to do with the contents
您会在这里注意到
request.files.getlist
的用法。这很重要,因为您正在使用MultipleFielField
类来接受多个文件。使用.getlist
允许您检索最终用户从其计算机上选择的所有文件。最后,要获取每个文件中包含的字节,您将需要获取每个文件的
stream
并read
。那应该产生您要查找的字节。我希望这证明是有用的。
关于python - MultipleFileField wtforms,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53021662/