Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中,如何将文件从本地存储同时传输到两个S3存储桶(存储桶a和存储桶B)?_Php_Amazon Web Services_Amazon S3 - Fatal编程技术网

在php中,如何将文件从本地存储同时传输到两个S3存储桶(存储桶a和存储桶B)?

在php中,如何将文件从本地存储同时传输到两个S3存储桶(存储桶a和存储桶B)?,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,我有一个将文件传输到S3存储桶的代码,但现在我必须通过php同时将文件传输到两个S3存储桶(存储桶a和存储桶B)。他们做同样事情的一个简单方法是重写第二个bucket的文件传输代码,但我不想这样做。有没有其他方法可以巧妙地做到这一点。 如有任何帮助或建议,将不胜感激。提前感谢同时感谢是什么意思 要将文件发送到一个aws s3存储桶,您需要启动一个请求,在一个请求中,您只能将一个文件推送到一个存储桶,因此您需要运行两个请求才能将同一文件推送到两个存储桶 为了实现无缝“同时”并使用PHPV3SDK,

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

同时感谢是什么意思

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

为了实现无缝“同时”并使用PHPV3SDK,您可以在运行中的每个请求时并行运行请求

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

你说的“同时”是什么意思

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

为了实现无缝“同时”并使用PHPV3SDK,您可以在运行中的每个请求时并行运行请求

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


您可以创建一个Lambda函数,将文件复制到另一个bucket。中给出了一个示例实现。通过使用Lambda函数,您不必修改PHP应用程序。

您可以创建一个Lambda函数,将文件复制到另一个bucket。中给出了一个示例实现。通过使用Lambda函数,您不必修改PHP应用程序。

感谢frederic的回复,是的,您的回答是正确的,同时意味着同时进行。我已经有了将文件发送到两个目标存储桶的方法。有没有其他方法可以做到这一点,还有一件事我想问你-两个目标存储桶的区域与本例不同,我可以实现相同的目标吗?你需要声明两个客户端,每个区域一个,请参阅更新的示例。至于不同的做法,不,所有其他方法都会涉及在上传第一个文件后触发事件,以在另一个存储桶上复制该文件,因此您可以实现复制,但不是同时进行。我认为这是实现无缝实时的最佳方法感谢frederic对您的回答,是的,您答对了,同时意味着同时。我已经有了将文件发送到两个目标存储桶的方法。有没有其他方法可以做到这一点,还有一件事我想问你-两个目标存储桶的区域与本例不同,我可以实现相同的目标吗?你需要声明两个客户端,每个区域一个,请参阅更新的示例。至于不同的做法,没有任何其他方式会涉及在上传第一个文件后触发事件,以在另一个存储桶上复制文件,因此您可以实现复制,但不是同时进行。这是实现无缝实时的最佳方式谢谢jbird,我已经通过了您共享的链接,但我不想将所有文件发送到第二个目标存储桶,我只想将一些特定文件发送到单个目标存储桶中的目标存储桶和rest文件,还有一件事我想问你-两个目标存储桶的区域不同,在这种情况下,我能实现相同的目标吗?谢谢jbird,我已经浏览了您共享的链接,但我不想将所有文件发送到第二个目标存储桶,我只想将一些特定文件发送到单个目标存储桶中的目标存储桶和rest文件,还有一件事我想问您-两个目标存储桶的区域与本例不同,我能实现同样的目标吗?
$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!';
});