想限制用户上传文件的大小,该配哪个设置?这篇把三个相关设置(FILE_UPLOAD_MAX_MEMORY_SIZE、DATA_UPLOAD_MAX_MEMORY_SIZE、DATA_UPLOAD_MAX_NUMBER_FILES)和表单校验各自管什么试出来。
上传 1 MiB → status 200 {'files': 1, 'total': 1048576}
上传 5 MiB → status 200 {'files': 1, 'total': 5242880}
上传 30 MiB → status 200 {'files': 1, 'total': 31457280}常见误解:DATA_UPLOAD_MAX_MEMORY_SIZE 或 FILE_UPLOAD_MAX_MEMORY_SIZE 是文件大小上限。都不是(见下)。
500 KiB → {'valid': True, 'errors': {}}
1024 KiB → {'valid': True, 'errors': {}}
1025 KiB → {'valid': False, 'errors': {'f': ['too_big']}}
5000 KiB → {'valid': False, 'errors': {'f': ['too_big']}}在 clean_<field> 或校验器里检查 size,给用户友好提示。想在收完之前就拒绝,要看请求头 Content-Length(可伪造,本文没有做)或在代理层限制。
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 上传 10 MiB 文件的 multipart: status 200 {'files': 1, 'total': 10485760}
3 MiB 的普通表单字段(非文件):status 400 b'{"error": "RequestDataTooBig"}'DATA_UPLOAD_MAX_NUMBER_FILES 默认 = 100
上传 100 个文件 → status 200 {'files': 100, 'total': 100}
上传 101 个文件 → status 400 {'error': 'TooManyFilesSent'}FILE_UPLOAD_MAX_MEMORY_SIZE:文件留内存还是落盘(第 68 篇);DATA_UPLOAD_MAX_MEMORY_SIZE:非文件请求数据读进内存的上限;DATA_UPLOAD_MAX_NUMBER_FILES:一次请求最多几个文件。