MultiFileField不返回文件,返回_str_

我正在尝试使用“ MultiFileField”在flask中使用WTForms上传多个图像,但是,它返回的是字符串而不是文件对象。 所以我尝试使用以下内容:

request.files.getlist(form.upload_field.data)

但是它返回一个空列表,因此无论如何我都可以处理以将照片保存到目录中

xiaoyr062285 回答:MultiFileField不返回文件,返回_str_

有使用Flask here上传文件的文档,您正在通过访问request.files对象的正确方式进行操作。我遇到了两种从那里回来的空列表的方法:

1。 enctype表单html属性未设置

以下是呈现MultipleFileField()的示例模板:

template = """
<form action="" method="POST" enctype="multipart/form-data">
{{ form.upload_field() }}
{{ form.submit() }}
</form>
"""

如果我删除enctype=...部分,则文件列表将返回空,否则它将具有值。 page on the internet说:

  

当您使用具有文件上传控件的表单时,此值是必需的

2。将错误的密钥传递给request.files.getlist()

request.fileswerkzeug.MultiDict,它是键到值的映射,旨在处理同一个键具有多个值的情况。

使用与上述相同的表单模板,在POST时检查request.filesprint(list(request.files.keys())))的密钥会显示['upload_field']

werkzeug.MultiDict.getlist有一个 required 参数:

  

-要查找的键。

因此,此时MultiDict实例中的唯一键是字符串'upload_field',如果我们想从getlist方法取回任何东西,则必须将此键作为传递给{ {1}}。在示例代码中,您传递了getlist属性的值(在我的测试中为form.upload_field.data)。将其更改为None,您应该离开了。

这是一个可行的最小示例,它将在表单提交时打印调用'upload_field'的结果。运行脚本,在浏览器中访问request.files.getlist(),上传几个文件并查看终端输出。

http://127.0.0.1:5000
本文链接:https://www.f2er.com/3138580.html

大家都在问