目前,当我调用$s3->list_objects()
方法时,它会按照添加对象的顺序返回对象。我希望以相反的顺序列出对象,以便首先显示最新的对象。我找不到可以传递给$s3->list_objects()
方法以反转顺序的参数。我正在使用Amazon S3 PHP SDK。是否有这样的参数或方法?
目前,当我调用$s3->list_objects()
方法时,它会按照添加对象的顺序返回对象。我希望以相反的顺序列出对象,以便首先显示最新的对象。我找不到可以传递给$s3->list_objects()
方法以反转顺序的参数。我正在使用Amazon S3 PHP SDK。是否有这样的参数或方法?
我想做同样的事情,但不想用数据库来跟踪最新的对象。由于您只需要按字母顺序反向排序键。
通常,时间戳是按字母顺序排列的。时间戳可以表示为long类型。我们可以通过(最大long-时间戳long)获取反向字母时间标识符,并使用所有前导0格式化它。
因此,如果您使用键=前缀+时间戳ID +后缀来存储S3对象,那么可以使用列表来获取最新的对象。
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);