亚马逊S3批量上传

8

我一直在尝试使用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个回答

14

刚刚自己解决了这个问题。

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

use Aws\CommandPool;

// your code here

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

您将收到按照命令顺序排序的结果数组。其中一个区别是,如果命令失败,这也将包括Exception对象。


不错,Chris。我一直很忙,今天才测试了一下! - Wakeel
这些内容未被添加在https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/migration.html上。 - Ramratan Gupta
这里是 => https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_commands.html#commandpool - Efriandika Pratama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接