我一直在尝试使用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);
提前致谢!
答案 0 :(得分:9)
我自己解决了这个问题。
而不是调用$s3->execute()
,将客户端和$commands
数组传递给CommandPool,如下所示:
use Aws\CommandPool;
// your code here
$results = CommandPool::batch($s3, $commands);
您将收到一系列结果,按照与命令相同的顺序排序。其中一个不同之处是,如果命令失败,它还将包含Exception
个对象。