未提交字段时 Flask 的 request.files.getlist 不为空
Flask's request.files.getlist for isn't empty when field is not submitted
我想通过以下方式获取已上传照片的列表:photos = request.files.getlist("photo")
。但是,如果我没有在浏览器中选择任何文件,photos
值不像其他字段那样为空。
我想通过以下操作检查是否没有提交文件:
if not photos:
pass
但是总是有一个空的 FileStorage
对象,即使没有提交文件也是如此:
request.files.getlist("photo")
[<FileStorage: '' ('application/octet-stream')>]
它为什么在那里?如果列表永远不会为空,我如何检查没有上传文件?
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
关于空文件存储对象,意味着如果在提交表单时文件字段留空并且您得到一个空文件存储对象,并且想要过滤it.you 可以应用下面提到的检查。
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对象的文件名属性就像field.data.file.filename = '',这样我们就可以根据这个条件进行过滤。
我想通过以下方式获取已上传照片的列表:photos = request.files.getlist("photo")
。但是,如果我没有在浏览器中选择任何文件,photos
值不像其他字段那样为空。
我想通过以下操作检查是否没有提交文件:
if not photos:
pass
但是总是有一个空的 FileStorage
对象,即使没有提交文件也是如此:
request.files.getlist("photo")
[<FileStorage: '' ('application/octet-stream')>]
它为什么在那里?如果列表永远不会为空,我如何检查没有上传文件?
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
关于空文件存储对象,意味着如果在提交表单时文件字段留空并且您得到一个空文件存储对象,并且想要过滤it.you 可以应用下面提到的检查。
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对象的文件名属性就像field.data.file.filename = '',这样我们就可以根据这个条件进行过滤。