我一直在尝试使用 s3 客户端 execute()
方法进行批量上传。它不断抛出异常:
Message: Argument 1 passed to Aws\AwsClient::execute() must implement interface Aws\CommandInterface, array given, called in....
即使遵循了文档中的示例代码。
检查这个例子,也许我做错了什么:
$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);
提前致谢!
最佳答案
我自己解决了这个问题。
不是调用 $s3->execute()
,而是将客户端和 $commands
数组传递给 CommandPool像这样:
use Aws\CommandPool;
// your code here
$results = CommandPool::batch($s3, $commands);
您将收到一组结果,按照与命令相同的顺序排序。其中一个区别是,如果命令失败,这还将包括 Exception
对象。
关于php - 亚马逊s3批量上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39640723/