首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultipleFileField wtforms

MultipleFileField wtforms
EN

Stack Overflow用户
提问于 2018-10-27 19:56:44
回答 2查看 2.4K关注 0票数 5
代码语言:javascript
复制
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))

表格:

代码语言:javascript
复制
<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。

EN

回答 2

Stack Overflow用户

发布于 2019-04-18 01:45:37

FileField类的documentation特别说明了有关处理文件内容的以下内容:

默认情况下,该值将是在表单数据中发送的文件名。WTForms不处理框架的文件处理能力。

同样的事情也适用于MultipleFileField类。

这意味着您必须向flask请求这些文件。而且,最快的方法是使用您正在处理的请求的request.files

总之,您需要重写product_add_pics函数以从request对象获取文件,如下所示:

代码语言:javascript
复制
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操作。这应该会产生您要查找的字节数。

我希望这被证明是有用的。

票数 5
EN

Stack Overflow用户

发布于 2021-09-19 02:14:54

我知道这个问题很老,但我花了四个小时的时间拼命寻找解决方案,最后在一个错误代码的帮助下解决了这个问题。除非您在表单中指定了正确的编码,否则MultiFileField将以字符串形式返回文件名。只需添加:

代码语言:javascript
复制
enctype="multipart/form-data"

添加到HTML form标记中,原始代码将返回

代码语言:javascript
复制
<class 'werkzeug.datastructures.FileStorage'>

不出所料。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53021662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档