2016-09-22 3 views
6

나는 execute() 메서드를 사용하여 일괄 업로드를 시도하고 있습니다. 이 던지는 예외를 유지 :Amazon S3 배치 업로드

메시지

: AWS에 전달 된 인수 1 \ AwsClient가 :: 인터페이스 AWS \ CommandInterface를 구현해야합니다) (실행, 배열을 지정해, 심지어 다음 이후에 ....

라고 doc의 예제 코드. 사전에

$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()를 호출

, 그래서 같은 CommandPool에 클라이언트와 $commands 배열을 전달 :

use Aws\CommandPool; 

// your code here 

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

당신은 명령과 동일한 순서로 정렬 결과의 배열을 받게됩니다. 차이점 중 하나는 명령이 실패한 경우 Exception 개체도 포함된다는 것입니다.

+0

멋진 Chris ... 나는 오늘 매우 바빴고 방금 테스트되었습니다! – Wakeel

+0

이 항목은 https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/migration.html에 추가되지 않았습니다. –