You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中获取FileStorage对象的文件大小?含上传校验需求

在Flask中保存FileStorage文件前获取文件大小的方法

嘿,这个场景我太熟悉了!其实不用等到保存文件之后再获取大小,FileStorage对象本身就有两种方式可以在保存前拿到文件大小,下面给你详细说:

方法1:直接使用content_length属性

Flask的FileStorage对象内置了content_length属性,它对应HTTP请求里的Content-Length头,能直接返回文件的字节大小:

from flask import request

file = request.files['file']
file_size = file.content_length  # 结果是字节数,比如1024就是1KB

⚠️ 注意:如果客户端没有在请求中发送Content-Length头,这个属性会返回None,所以用的时候最好先做个非空判断。

方法2:通过文件指针操作(更可靠)

如果担心content_length不可靠,我们可以利用FileStorage包装的类文件对象特性,通过移动文件指针来获取准确大小:

from flask import request
import os

file = request.files['file']
# 将文件指针移动到文件末尾
file.seek(0, os.SEEK_END)
# tell()方法返回当前指针位置,也就是文件的总字节数
file_size = file.tell()
# 一定要把指针移回文件开头!不然保存文件的时候会从末尾开始写,导致文件为空
file.seek(0)

这个方法不管客户端有没有传Content-Length头,都能拿到准确的文件大小,是我平时更推荐的方式。

结合你的业务场景使用

拿到文件大小后,你就可以和目标路径下已存在的文件大小对比了:

import os

target_path = "/your/public/download/path/filename.ext"
if os.path.exists(target_path):
    existing_size = os.stat(target_path).st_size
    if existing_size == file_size:
        # 文件已存在,拒绝上传
        return "该文件已存在,无需重复上传", 400
# 大小不一致,或者文件不存在,执行保存操作
file.save(target_path)

内容的提问来源于stack exchange,提问作者strymsg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:27:08