一次文件上传到了 Flask 里是什么对象?有哪些属性?大文件放在哪?没选文件会怎样?save 有什么坑?这篇从 FileStorage 开始逐项打印,并用 curl 真实上传一次。
filename = 'report 2024.pdf'
name = 'file'
content_type = 'application/pdf'
mimetype = 'application/pdf'
content_length = 0
headers = {'Content-Disposition': 'form-data; name="file"; filename="report 2024.pdf"', 'Content-Type': 'application/pdf'}
stream_type = 'SpooledTemporaryFile'
bool = True
head = 'HELLO'
pos_before = 0
pos_after_read5 = 5
size = 2005
saved_size = 2005
与原始数据的 sha256 前 12 位相同: True上一篇:request.args、request.form、request.json;下一篇:多文件上传;文件名清洗见secure_filename() 的安全处理。
空 filename: {'bool': False, 'filename': '', 'len': None, 'present': True}
根本没有 file 字段: {'bool': False, 'filename': None, 'len': None, 'present': False}
视图里 request.files["file"] 缺失 → 400 1000 字节 → {'max_size': 512000, 'rolled': False, 'type': 'SpooledTemporaryFile'}
400000 字节 → {'max_size': 512000, 'rolled': False, 'type': 'SpooledTemporaryFile'}
600000 字节 → {'max_size': 512000, 'rolled': True, 'type': 'SpooledTemporaryFile'}
5000000 字节 → {'max_size': 512000, 'rolled': True, 'type': 'SpooledTemporaryFile'}save(路径) → b'content' save(文件对象) → b'content2' 目标是已存在的目录: IsADirectoryError: [Errno 21] Is a directory: '<实验目录>/fltmp/f35_uploads' 父目录不存在: FileNotFoundError: [Errno 2] No such file or directory: '<实验目录>/fltmp/f35_uploads/nodir/a.txt' 同一个 FileStorage 连续 save 两次:第二次文件大小 = 0 (流读到末尾后没有复位,第二次是空文件)
curl -F doc=@hello.txt -F title=我的文档 → hello.txt|text/plain|13|我的文档 curl -F "doc=@hello.txt;type=text/markdown;filename=改名.md" → 改名.md|text/markdown|13|None