使用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
相关产品推荐
相关产品推荐

