这是我的方法:
public function listVersionsForPath($s3Path, $bucketName, $offset, $limit) {
$versions = array();
$tmpS3Path = $this->cleanS3Path($s3Path);
$fullBucketName = self::getFullBucketName($bucketName);
$request = array(
'Bucket' => $fullBucketName,
'Prefix' => $tmpS3Path,
'MaxKeys' => 100,
'VersionIdMarker' => ???,
);
$iterator = $this->client->getListObjectVersionsIterator($request);
foreach ($iterator as $object) {
if(!isset($versions[$object['Key']])) {
$versions[$object['Key']] = array();
}
$versions[$object['Key']][] = $object['VersionId'];
}
return $versions;
}
我需要将返回的版本数限制在至少 100 个,因为我有一个包含 1000 多个版本的对象,这直接导致 PHP 崩溃。但是,我不知道如何跳过前 100 个版本,将它们从内存中取出,然后加载下 100 个。
最后,我至少找到了一个 S3 请求中所有有效选项的列表。如果您在 aws.phar 中打开 S3Client.php,第 184 行会列出 AWS 具有的等同于“偏移量”的内容。基本上,您必须获取一个对象列表,然后将偏移量设置为上一个列表中最后一个键的值。我自己还不能做到这一点,我正在使用继续;休息一下;用于假分页。
最佳答案
在 AWS S3 对象版本列表中获取偏移量的唯一方法是迭代前 X 个条目,丢弃它们,然后只返回请求的条目。这是我上次使用此代码(3 年前)时 API 的限制。
关于php - 如何在 AWS S3 对象版本列表中获取 "offset"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565372/