2013-01-10 8 views
12

Udało mi się utworzyć następny przycisk do wyświetlania obiektów w wiadrze Amazon S3. Za każdym razem, gdy użytkownik kliknie przycisk NEXT, zwrócone zostaną tylko dwa klucze. Kod jest następujący:Jak uzyskać poprzednią stronę obiektów listy w Amazon S3

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

Powyższy kod zwróci 2 klucze po markerze. Ale nie mogę utworzyć poprzedniego przycisku. Czy jest coś, co mogłoby przywrócić poprzednie 2 klucze przed znacznikiem? Czy możesz zaproponować lepsze rozwiązanie. Używam PHP SDK. Dzięki

Odpowiedz

3

AWS S3 API nie ma żadnych parametrów, które określałyby zwracanie elementów przed znacznikiem. W najnowszej wersji interfejsu API zmieniono nazwę na parametr start-after, który podkreśla fakt, że obok wartości parametru są wyświetlane tylko elementy.

Aby zaimplementować przycisk Poprzedni, należy raczej przechowywać sekwencyjną listę znaczników dla określonego żądania w DB lub pamięci podręcznej. Nie może być na przykład 3 kolumny:

request_hash | marker_key | previous_marker_key 

przetwarzania bieżącego żądania można dodać wiersze do tabeli i pobrać wiersze. Oto pseudo-kod, jak może wyglądać:

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