我想使用photos = request.files.getlist("photo")
获取上传的照片列表。但是,如果我没有在浏览器中选择任何文件,则photos
值不会像其他字段一样为空。
我要检查是否未提交任何文件:
if not photos:
pass
但是即使没有提交任何文件,总会有一个空的FileStorage
对象:
request.files.getlist("photo")
[<FileStorage: '' ('application/octet-stream')>]
为什么在那儿?如果列表永远不会为空,如何检查没有文件上传?
答案 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 ='',因此我们可以根据此条件对其进行过滤。