未提交字段时,烧瓶的request.files.getlist不为空

时间:2019-08-24 20:27:00

标签: python flask form-data

我想使用photos = request.files.getlist("photo")获取上传的照片列表。但是,如果我没有在浏览器中选择任何文件,则photos值不会像其他字段一样为空。

我要检查是否未提交任何文件:

if not photos:
   pass

但是即使没有提交任何文件,总会有一个空的FileStorage对象:

request.files.getlist("photo")
[<FileStorage: '' ('application/octet-stream')>]

为什么在那儿?如果列表永远不会为空,如何检查没有文件上传?

2 个答案:

答案 0 :(得分:0)

request.files会填充客户端提交的所有内容。不幸的是,即使没有选择文件,浏览器也会提交文件输入,这看起来像是没有名称和数据的文件。名称或数据都不需要具有有效的空文件,因此,由应用程序决定要做什么。

如果

FileStorage没有名字,将被认为是False。 Flask-WTF认为没有名称的FileStorage为空,用于验证。

photo = request.files["photo"]

if not photo:
    # no photo
photos = request.files["photo"].getlist()

if not photos or not any(f for f in photos):
    # no photos

答案 1 :(得分:0)

关于空文件存储对象,表示在提交表单时“文件”字段是否为空,而您正在获取空文件存储对象,并希望对其进行过滤。可以应用以下提到的检查。

if not (all(isinstance(item, FileStorage) for item in field.data) and 
         field.data and all((item.filename != '') for item in field.data)):
        return

对于没有上载的文件,FileStorage对象的filename属性类似于field.data.file.filename ='',因此我们可以根据此条件对其进行过滤。