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

使用Boto3 S3 Client设置自定义元数据失败,head_object返回空值

问题解决:S3自定义元数据设置后head_object返回空字典

你的问题出在自定义元数据的键名格式错误:在使用boto3的Metadata参数时,不需要给键名加上x-amz-meta-前缀,SDK会自动帮你处理这个前缀。

错误原因

你当前代码里的元数据键是x-amz-meta-expiretime,这会导致S3实际存储的元数据键为x-amz-meta-x-amz-meta-expiretime(SDK自动再加一层前缀),而调用head_object时,返回的Metadata会自动去掉x-amz-meta-前缀,最终找不到匹配的键,所以返回空字典{}。

修正后的代码

import time
# 修正元数据键名,去掉x-amz-meta-前缀
metadata = {
    'expiretime': f'{int(time.time() + 86400)}'  # 设置过期时间戳
}
s3_client.delete_object(Bucket=bucket_name, Key=s3_file_path)
response = s3_client.upload_file(file_path, bucket_name, s3_file_path,
                                 ExtraArgs={'Metadata': metadata})
print(f"文件 {file_path} 成功上传到 S3 上的 {s3_file_path}")

# 获取对象的头部信息,包括元数据
head_response = s3_client.head_object(Bucket=bucket_name, Key=s3_file_path)
print(f"Metadata: {head_response['Metadata']}")

验证结果

修正后,head_response['Metadata']会返回类似{'expiretime': '1718xxxxxx'}的结果,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:17:03