我使用此代码,它返回的内容不超过1000个上传部分。如何使用php-aws lib listParts()方法获取超过1000个部分的amazon s3分段上传?感谢。
$parts = $s3->listParts(array(
'Bucket' => $bucket,
'Key' => $keyName,
'UploadId' => $uploadId,
));
答案 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']);
}