php - 如何在 AWS S3 对象版本列表中获取 "offset"?

标签 php amazon-web-services amazon-s3

这是我的方法:

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/

相关文章:

amazon-web-services - 访问公共(public) AWS s3 存储桶

amazon-s3 - 定期安排 AWS Glue 爬网程序有什么用。运行一次似乎就足够了

php - 带有默认集线器图像或一个自定义单个堆栈的 Docker LAMP

php - 在 php 和 javascript 中制作 "mosaic"效果

amazon-web-services - AWS如何释放/dev/nvme1n1p1和/dev/loop#处理 "No space left on device"

javascript - AWS javascript SDK多文件上传进度条

amazon-web-services - elasticmapreduce :RunJobFlow in AWS? 需要哪个策略

java - AWS : how to fix S3 event replacing space with '+' sign in object key names in json

php - 在类中访问 session 变量

php - PHP 中的简单密码保护