如何获取存储在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
相关产品推荐
相关产品推荐

