如何用PHP实现AWS S3 Put操作?改写CopyFrom代码实现桶间传输
用boto3的put方法实现跨S3桶文件传输
注意:你贴出的代码是Python的boto3代码(并非PHP),要将copy_from替换为put方法实现跨桶文件复制,需要调整对象实例类型并正确传递参数,以下是修正后的代码:
# 定义源对象信息,两种格式均支持 # 格式1:字符串形式(更简洁) move_source = f"{bucket}/{filename}" # 格式2:字典形式(与原代码格式一致) # move_source = {"Bucket": bucket, "Key": filename} # 使用s3.Object而非ObjectSummary,Object实例才支持put操作 var_tgt_obj = s3.Object(dest_bucket.name, path + filename) # 调用put方法,传入复制源与加密参数 var_tgt_obj.put( CopySource=move_source, SSEKMSKeyId=kms_key_id, ServerSideEncryption="aws:kms" )
关键说明:
- 必须使用
s3.Object类:ObjectSummary仅为对象的元数据摘要,不提供put操作能力,只有Object实例才能执行写入/复制类操作。 CopySource参数兼容两种格式:字符串格式"源桶名/对象键"或字典格式{"Bucket": "源桶名", "Key": "对象键"},boto3均可正确解析。- 保留原有KMS加密参数:确保目标对象写入时使用指定KMS密钥进行服务器端加密,与原
copy_from的行为保持一致。
常见排查点:
- 检查IAM权限:执行代码的角色/用户需拥有源桶的s3:GetObject权限、目标桶的s3:PutObject权限,同时需拥有指定KMS密钥的
kms:GenerateDataKey和kms:Decrypt权限。 - 验证路径拼接:确认
path + filename生成的目标键格式正确,避免出现多余斜杠或路径错误。
内容的提问来源于stack exchange,提问作者Rez Khan
相关产品推荐
相关产品推荐

