6

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

4

2 回答 2

3

我想做同样的事情,我真的不觉得我想要一个数据库来跟踪最新的对象。因为您只需要它们具有按字母顺序排列的键。

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

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

于 2015-04-03T21:55:45.430 回答
0

返回的对象list_objects()是 a 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 个文件,您可能会发现将所有文件的整个数组保存在内存中会变得有问题,因此您可能需要重新考虑是否需要像您建议的那样将所有文件都保存在内存中。

于 2013-01-18T21:28:25.963 回答