Amazon S3列表对象的顺序相反

时间:2013-01-18 08:30:36

标签: php amazon-web-services amazon-s3

目前,当我调用$s3->list_objects()方法时,它会按添加对象的顺序返回对象。我想以相反的顺序列出对象,以便我可以先拥有最新的对象。我找不到任何可以传递给可以反转顺序的$s3->list_objects()方法的参数。我正在使用Amazon S3 PHP SDK。有没有这样的参数或方法?

2 个答案:

答案 0 :(得分:2)

我希望做同样的事情,我真的不想让数据库跟踪最新的对象。因为您只需要它们按字母顺序反转顺序键。

时间戳通常按字母顺序排列。时间戳可以表示为long。我们可以通过获取(最大长时间戳长)并使用所有前导0格式化来获得反向字母时间标识符。

因此,如果使用key = prefix + timestampId + postfix存储S3对象,则可以使用list来获取最新的对象。

答案 1 :(得分:0)

list_objects()返回的对象是Guzzle\Service\Resource\Model,因此您需要使用该类提供的方法。为了执行下面评论中提到的分页请求,您可能需要执行以下操作:

$object_array = array();
$continue = true;
$list_params = array('Bucket' => 'your_aws_bucket', 'MaxKeys' => 1000);
while (true === $continue) {
    $result_obj = $s3->list_objects($list_params);
    $current_array = $result_obj->get('Contents');
    $object_array = array_merge($object_array, $current_array);
    $is_truncated = $result_obj->get('isTruncated');
    if ($is_truncated) {
        $list_params['Marker'] = $result_obj->get('NextKeyMarker');
    } else {
        $continue = false;
    }
}  
$reversed_array = array_reverse($object_array);

请注意,如果您正在讨论100,000个文件,您可能会发现保留内存中所有文件的整个数组都会出现问题,因此您可能需要重新考虑是否需要按照您的建议将所有内容保存在内存中。