2016-09-22 146 views
6

我一直在尝试使用S3客户端​​方法进行批量上传。它不断抛出异常:亚马逊s3批量上传

消息:传递给AWS参数1 \ AwsClient ::执行()必须实现接口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); 

提前感谢!

回答

9

刚刚解决了这个问题。

与其说$s3->execute()的,通过客户端和$commands阵列到CommandPool像这样:

use Aws\CommandPool; 

// your code here 

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

您会收到结果的阵列,在同一顺序的命令排序。其中一个不同之处在于,如果命令失败,这也包括Exception对象。

+0

不错的一个克里斯..我一直很忙,只是今天测试! – Wakeel

+0

这些东西没有添加在https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/migration.html上 –