from flask import Flask, request
uploaded_files = request.files.getlist("fileList")
for file in uploaded_files:
filename = file.filename
content = file.stream
files_contents[filename] = content
print(f"file contents: {list(files_contents.keys()).remove('')}")
emsg = "Files count: " + str(len(files_contents.keys()))
在获取文件时,发现即使取消上传即未选中任何文件 通过len(uploaded_files) 也会返回1. 如果选中文件,则显示正确。就其原因找到:
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
Gaurav Yadav回答于 2020-07-24
关于空文件存储对象,意味着如果提交表单时文件字段为空,并且您得到一个空的文件存储对象,并且想要过滤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对象的filename属性类似于field.data.file.filename = '',所以我们可以根据这个条件进行过滤。