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

