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 = '',所以我们可以根据这个条件进行过滤。
本文讨论了Flask应用中如何处理用户未选择文件时的空文件上传问题,提供了解决方案,包括检查FileStorage对象并过滤掉空文件。
9732

被折叠的 条评论
为什么被折叠?



