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

如何获取存储在Amazon S3桶中MediaFile关联s3_file字段的文件大小

现有代码问题点
  • 调用s3.Bucket()时未传入S3存储桶名称,是运行失败的核心原因
  • 无差别的异常捕获会吞掉报错信息,不利于问题排查
  • 若GenericFileField已对接S3存储后端,无需手动初始化boto3即可获取文件大小,实现更简单
方案1:修正boto3实现

请将代码中的存储桶名称替换为你实际使用的S3桶名,同时确保运行环境已配置正确的AWS访问密钥、区域信息:

def file_size(self):
    if not self.s3_file:
        return 0
    try:
        file_key = get_file_key(self.s3_file)
        s3 = boto3.resource("s3")
        bucket = s3.Bucket("替换为你的S3存储桶名称")
        return bucket.Object(file_key).content_length
    except Exception:
        return 0
方案2:通过Django文件字段直接获取(更推荐)

如果你的GenericFileField已经配置好S3存储后端,直接调用字段内置的size属性即可,存储后端会自动请求S3拉取元数据,无需额外维护boto3相关配置:

def file_size(self):
    if not self.s3_file:
        return 0
    try:
        return self.s3_file.size
    except Exception:
        return 0

如果需要降低S3请求频次,可以在文件上传阶段就把文件大小写入模型的独立字段,后续直接读取数据库字段即可,无需每次都调用S3接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:04