亚马逊s3批量上传

时间:2016-09-22 13:40:05

标签: php amazon-s3

我一直在尝试使用s3客户端execute()方法进行批量上传。它不断抛出异常:

  

消息:传递给Aws \ AwsClient :: execute()的参数1必须实现接口Aws \ CommandInterface,给定数组,调用....

即使遵循了文档中的示例代码。

检查这个例子也许我做错了什么:

$bucket   = 'myBucket';
$commands = [];

$s3 = new Aws\S3\S3Client([
    'version' => 'latest',
    'region'  => 'us-west-1',
]);

$commands[] = $s3->getCommand('PutObject', [
    'Bucket' => $bucket,
    'Key'    => 'key1.gif',
    'Body'   => 'PATH_TO_FILE_1',
]);

$commands[] = $s3->getCommand('PutObject', [
    'Bucket' => $bucket,
    'Key'    => 'key2.gif',
    'Body'   => 'PATH_TO_FILE_2',
]);

$s3->execute($commands);

提前致谢!

1 个答案:

答案 0 :(得分:9)

我自己解决了这个问题。

而不是调用$s3->execute(),将客户端和$commands数组传递给CommandPool,如下所示:

use Aws\CommandPool;

// your code here

$results = CommandPool::batch($s3, $commands);

您将收到一系列结果,按照与命令相同的顺序排序。其中一个不同之处是,如果命令失败,它还将包含Exception个对象。