我该如何为
flask_wtf.file.FileField
设置 FileSizeLimit 验证?我们需要添加一个像这样的自定义验证器:
from wtforms.validators import ValidationError
def FileSizeLimit(max_size_in_mb):
max_bytes = max_size_in_mb*1024*1024
def file_length_check(form, field):
if len(field.data.read()) > max_bytes:
raise ValidationError(f"File size must be less than {max_size_in_mb}MB")
field.data.seek(0)
return file_length_check
然后将验证器传递给文件上传字段,像这样:
uploaded_file = FileField('Upload your file', [FileRequired(), FileSizeLimit(max_size_in_mb=2)])
致谢:
上述答案在验证时有效,但在实际保存文件时会失败,原因是在大小验证中文件流已经用尽,代码如下:len(field.data.read())
为了节省时间,我最终得到的解决方案:
def FileSizeLimit(max_size_in_mb):
max_bytes = max_size_in_mb*1024*1024
def file_length_check(form, field):
if len(field.data.read()) > max_bytes:
raise ValidationError(
f'File size is too large. Max allowed: {max_size_in_mb} MB')
field.data.seek(0)
return file_length_check
app.config['MAX_CONTENT_LENGTH'] = limit_in_mb * 1024 * 1024