2013-01-10 8 views
12

Amazon S3バケットにオブジェクトをリストするための次のボタンを作成しました。ユーザーがNEXTボタンをクリックするたびに、2つのキーだけが返されます。コードは次のとおりですAmazon S3のリストオブジェクトの前のページを取得する方法

$response = $s3->list_objects('bucket_name', array(
       'prefix' => 'small/', 
       'max-keys' => 2, 
       'marker' => 'small/blah.jpg' 
      )); 

上記のコードは、マーカーの後に2つのキーを返します。しかし、私は前のボタンを作成することができません。前の2つのキーをマーカーの前に戻すことができるものはありますか?または、より良い解決策を提案することもできます。私はPHP SDKを使用しています。ありがとう

答えて

3

AWS S3 APIには、マーカーの前にアイテムを返すよう指定するパラメータはありません。 APIの最新バージョンではの名前がstart-afterに変更されました。このパラメータは、パラメータ値の横にある項目のみを取得することを強調しています。

[前へ]ボタンを実装するには、DBまたはキャッシュに特定の要求のマーカーのシーケンシャルリストを格納する必要があります。たとえば、次の3つの列があります。

request_hash | marker_key | previous_marker_key 

現在のリクエストを処理すると、行をテーブルに追加してフェッチすることができます。ここにいくつかの疑似コードがあります:

$requestHash = sha1(serialize([$bucketName, $prefix, $delimiter])); 
$markerForPreviousPage = $dbProvider 
    ->fetchPreviousMarker($requestHash, $_GET['current_marker']); 
$markerForNextPage = $keysFromS3[count($keysFromS3) - 1]; 
// here you will add values respectively to the columns request_hash, marker_key, previous_marker_key 
$dbProvider 
    ->addNewMarker($requestHash, $markerForNextPage, $_GET['current_marker']); 
関連する問題