如何在php中同时将文件从本地存储转移到两个S3桶(Bucket A和Bucket B)?

时间:2016-10-11 10:53:28

标签: php amazon-web-services amazon-s3

我有一个代码将文件传输到S3存储桶但现在我必须通过php同时将文件传输到两个S3存储桶(存储桶A和存储桶B)。他们这样做的一个简单方法是 - 重写第二个桶的传输文件的代码,但我不想这样做。有没有其他方法可以巧妙地做到这一点。 任何帮助或建议将不胜感激。提前致谢

2 个答案:

答案 0 :(得分:0)

你是什么意思同时

要将文件发送到一个aws s3存储桶,您需要发出请求,在单个请求中,您只能将文件推送到单个存储桶,因此您需要运行2个请求将同一文件推送到2个存储桶

实现无缝"同时"并使用php v3 sdk,您可以并行运行请求,以便在async mode

中运行每个请求
  

Transfer对象是GuzzleHttp \ Promise \ PromisorInterface的一个实例,这意味着传输可以异步进行,并通过调用对象的promise方法启动。

$clientA = new \Aws\S3\S3Client([
    'region'  => 'us-east-1',
    'version' => '2006-03-01',
]);
$clientB = new \Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'version' => '2006-03-01',
]);
$source = '/path/to/source/files';
$destA = 's3://bucketA';
$destB = 's3://bucketB';
$managerA = new \Aws\S3\Transfer($clientA, $source, $destA);
$managerB = new \Aws\S3\Transfer($clientB, $source, $destB);

// Initiate the transfer and get a promise.
$promiseA = $managerA->promise();
$promiseB = $managerB->promise();

// Do something when the transfer is complete using the then() method.
$promiseA->then(function () {
    echo 'sending to bucket A!';
});

$promiseB->then(function () {
    echo 'sending to bucket B!';
});

答案 1 :(得分:0)

您可以创建将文件复制到另一个存储桶的Lambda函数。 Content Replication Using AWS Lambda and Amazon S3中给出了一个示例实现。通过使用Lambda函数,您不必修改PHP应用程序。