現在、メソッドを呼び出すと$s3->list_objects()
、オブジェクトが追加された順序でオブジェクトが返されます。オブジェクトを逆順にリストして、最新のオブジェクトを最初に表示できるようにします。$s3->list_objects()
順序を逆にすることができるメソッドに渡すことができるパラメーターが見つかりません。Amazon S3 PHP SDK を使用しています。そのようなパラメータまたはメソッドはありますか?
2 に答える
私は同じことをしようとしていますが、最新のオブジェクトを追跡する方法で DB が必要だとは本当に思いません。アルファベット順の逆順のキーが必要なだけなので。
通常、タイムスタンプの順序はアルファベット順です。タイムスタンプは long として表すことができます。(最大の長さ - タイムスタンプの長さ) を取得し、先頭にすべて 0 を付けてフォーマットすることで、アルファベットの逆順の時間識別子を取得できます。
したがって、キー = プレフィックス + タイムスタンプ ID + ポストフィックスを使用して S3 オブジェクトを保存すると、list を使用して最新のオブジェクトを取得できます。
によって返されるオブジェクト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 個のファイルについて話している場合、すべてのファイルの配列全体をメモリに保持すると問題が発生する可能性があるため、提案したようにすべてをメモリに保持する必要があることを再考する必要があることに注意してください。