2013-01-10 6 views
12

Ich habe erfolgreich die nächste Schaltfläche zum Auflisten von Objekten in Amazon S3-Bucket erstellt. Jedes Mal, wenn der Benutzer auf die Schaltfläche WEITER klickt, werden nur zwei Schlüssel zurückgegeben. Der Code lautet wie folgtSo erhalten Sie die vorherige Seite von Listenobjekten in Amazon S3

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

Der obige Code gibt 2 Schlüssel nach dem Marker zurück. Aber ich kann die vorherige Schaltfläche nicht erstellen. Gibt es etwas, das die vorherigen 2 Schlüssel vor dem Marker zurückgeben könnte? Oder können Sie eine bessere Lösung vorschlagen? Ich benutze PHP SDK. Danke

Antwort

3

AWS S3 API haben keine Parameter, die angeben, um Elemente vor dem Marker zurückzugeben. In der neuesten API-Version wurde der in den Parameter start-after umbenannt, der betont, dass nur Elemente neben dem Parameterwert angezeigt werden.

Um die Schaltfläche "Zurück" zu implementieren, sollten Sie lieber eine fortlaufende Liste mit Markierungen für eine bestimmte Anforderung in DB oder Cache speichern. Es könnte drei Spalten zum Beispiel sein:

request_hash | marker_key | previous_marker_key 

die aktuelle Anfrage wird bearbeitet Sie die Zeilen-Tabelle hinzufügen könnte und die Zeilen holen. Hier ist ein Pseudo-Code, wie es aussehen könnte:

$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']);