2016-09-22 29 views
6

Tôi đã cố gắng thực hiện tải lên hàng loạt bằng cách sử dụng phương thức của khách hàng s3 execute(). Nó giữ ném ngoại lệ:Tải lên hàng loạt s3 Amazon

nhắn: Đối số 1 truyền cho Aws \ AwsClient :: thực hiện() phải thực hiện giao diện Aws \ CommandInterface, mảng nhất định, gọi ....

Ngay cả sau khi làm theo mã ví dụ từ tài liệu.

Kiểm tra ví dụ này có lẽ tôi đang làm một cái gì đó sai:

$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); 

Cảm ơn trước!

Trả lời

9

Chỉ cần giải quyết vấn đề này.

Thay vì gọi $s3->execute(), vượt qua các máy khách và $commands mảng đến một CommandPool như vậy:

use Aws\CommandPool; 

// your code here 

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

Bạn sẽ nhận được một loạt các kết quả, sắp xếp theo thứ tự giống như các lệnh. Một trong những điểm khác biệt là điều này cũng sẽ bao gồm các đối tượng Exception nếu lệnh không thành công.

+0

Đẹp một Chris .. tôi đã rất bận rộn và vừa được thử nghiệm ngay hôm nay! – Wakeel

+0

Những điều này không được thêm vào https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/migration.html –

Các vấn đề liên quan