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

使用boto3 put_object上传至AWS S3后,如何获取传输文件大小?

问题:S3 put_object上传后,能否不额外交互也不计算原数据大小的情况下获取文件大小?

用户使用Python的boto3.client和put_object方法向AWS S3上传JSON数据,代码如下:

import boto3
import json

BUCKET = "your-bucket-name"  # 需替换为实际存储桶名

def snapshot(data, path):
    s3_client = boto3.client("s3", region_name="us-east-1")
    r = s3_client.put_object(
        Body=bytes(json.dumps(data, indent=2, default=str).encode("utf-8")),
        ContentType="application/json",
        Bucket=BUCKET,
        Key=path + ".json"
    )

    # 想要返回类似r.fileSize的内容

用户查阅boto3及AWS S3 API文档后,未找到获取传输对象文件大小的方法,询问:能否在不额外与S3交互(即不读取刚上传的文件)、也不直接用Python计算传入对象大小的前提下实现这一需求?


回答

不行,没有这样的途径。

具体原因:

  • put_object的返回响应(包括AWS S3原生的PutObject API响应)中,并不包含已上传对象的大小字段,无法直接从上传结果中提取该数值。
  • 若不额外调用head_object或get_object这类接口去获取对象元数据,无法从S3端获取到已上传对象的大小。
  • 若同时拒绝在本地计算上传内容的字节长度(比如计算json.dumps(data, ...).encode("utf-8")后的字节数据长度),则没有其他方式能获取到这个大小值。

总结:要么在上传前本地计算好内容的字节长度,要么后续调用一次S3元数据接口查询,没有第三种方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:15:01