Php AWS S3使用不同的凭据将对象从一个bucket复制到另一个bucket

Php AWS S3使用不同的凭据将对象从一个bucket复制到另一个bucket,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,有没有办法使用php将对象从一个bucket复制到另一个具有不同凭据的bucket? 因为源bucket的凭据不同于目标bucket。 我可以做的一件事是获取对象()并保存它,然后将其放入putObject()。 有什么简单的方法吗?原则上,您可以创建两个具有不同凭据的S3客户端,然后使用一个下载对象,另一个上载数据。这有一个缺点,即所有数据都将下载到您的机器上,然后再次上载,这可能会占用大量带宽。如果处理大型对象,将这些数据存储在内存中可能会成为一个问题 如果您可以控制目的地存储桶和源帐户中的

有没有办法使用php将对象从一个bucket复制到另一个具有不同凭据的bucket? 因为源bucket的凭据不同于目标bucket。 我可以做的一件事是获取对象()并保存它,然后将其放入putObject()。
有什么简单的方法吗?

原则上,您可以创建两个具有不同凭据的S3客户端,然后使用一个下载对象,另一个上载数据。这有一个缺点,即所有数据都将下载到您的机器上,然后再次上载,这可能会占用大量带宽。如果处理大型对象,将这些数据存储在内存中可能会成为一个问题


如果您可以控制目的地存储桶和帐户中的角色/用户,则有更好的选择。在这种情况下,您可以在目标bucket上设置bucket策略,以允许源帐户中的用户在bucket上使用PutObject+CopyObject。然后,您还需要将这些权限添加到源帐户中的用户。之后,您可以使用API调用直接将对象从源复制到目标bucket,而无需先下载它们。我建议在CopyObject调用中包含ACL
BucketOwnerFullControl
,否则您可能无法访问目标帐户中的对象。

您是否使用AWS SDK for PHP?如果您无法管理IAM角色和bucket策略,您的方法是唯一的选择@oleskii donoha是的,我用的是AWS SDKw如果我这样做会怎么样<代码>$s3=新的s3客户端(凭证1)$结果=$s3->getObject(数组('Bucket'=>$sourceBucket,'Key'=>$sourceFilename,)
$s3=新的s3客户端(凭证2)$s3->putObject(数组('Bucket'=>$targetBucket,'Key'=>$targetFilename,'Body'=>$result['Body'])我知道这种编码有一个缺点,但不可能改变bucket策略。这似乎大致相当于我的第一个建议,但有相关的缺点(我不说),所以它可以工作。