如何使用php-aws-lib-listParts()方法上传超过1000个amazons3多部分


How can i get more than 1000 parts of amazon s3 multipart upload using php-aws lib listParts() method.

我使用了这段代码,它给我返回的上传部分不超过1000个。如何使用php-aws-lib-listParts()方法上传超过1000个amazons3多部分?谢谢

$parts = $s3->listParts(array(
            'Bucket' => $bucket,
            'Key' => $keyName,
            'UploadId' => $uploadId,
        ));

如果有1000多个零件,则结果将包含NextPartNumberMarker字段。取NextPartNumberMarker中的值,然后发出另一个请求,与您原来的请求完全相同,但添加一个PartNumberMarker参数,该参数的值来自NextPartNumberMarker,如下所示:

$result2 = $s3->listParts(array(
    'Bucket' => $bucket,
    'Key' => $keyName,
    'UploadId' => $uploadId,
    'PartNumberMarker' => result1['NextPartNumberMarker'],
));

这些参数记录在用于ListParts操作的API文档中。

不过,这样做有点痛苦,所以最简单的方法是使用SDK的"Iterators"功能。迭代程序一次枚举一个部分,并根据需要在后台自动发出后续请求。要将迭代器用于ListParts操作,可以执行以下操作:

$parts = $s3->getIterator('ListParts', array(
    'Bucket' => $bucket,
    'Key' => $keyName,
    'UploadId' => $uploadId,
));
foreach ($parts as $part) {
    // Do something with the part data
    printf("%d: %s (%d bytes)'n", $part['PartNumber'], $part['ETag'], $part['Size']);
}