当字段未提交时,Flask 的 request.files.getlist 不为空

Tom*_*yer 5 python form-data flask

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

我想通过执行以下操作检查是否没有提交文件:

if not photos:
   pass
Run Code Online (Sandbox Code Playgroud)

FileStorage但即使没有提交文件,也总是有一个空对象:

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

为什么它在那里?如果列表不为空,如何检查是否没有上传文件?

dav*_*ism 2

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

FileStorageFalse如果没有名称,将予以考虑。Flask-WTF 将FileStorage没有名称的 a 视为空以进行验证。

photo = request.files["photo"]

if not photo:
    # no photo
Run Code Online (Sandbox Code Playgroud)
photos = request.files["photo"].getlist()

if not photos or not any(f for f in photos):
    # no photos
Run Code Online (Sandbox Code Playgroud)