如何使用php-aws lib listParts()方法获取超过1000个部分的amazon s3分段上传。

时间:2014-04-22 11:52:27

标签: php amazon-s3

我使用此代码,它返回的内容不超过1000个上传部分。如何使用php-aws lib listParts()方法获取超过1000个部分的amazon s3分段上传?感谢。

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

1 个答案:

答案 0 :(得分:0)

如果超过1000个部分,则结果将包含NextPartNumberMarker字段。从NextPartNumberMarker获取值并发出另一个请求,与原始请求完全相同,但添加PartNumberMarker参数,其值为NextPartNumberMarker,如下所示:

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

这些参数记录在API documentation for the ListParts operations

这样做有点痛苦,所以最简单的方法是使用SDK的"Iterators" feature。迭代器一次枚举一个部分,并根据需要在后台自动生成后续请求。要使用迭代器进行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']);
}