2013-01-10 8 views
12

Ho creato con successo il pulsante successivo per elencare gli oggetti nel bucket Amazon S3. Ogni volta che l'utente fa clic sul pulsante NEXT verranno restituite solo due chiavi. Il codice è il seguenteCome ottenere la pagina precedente degli oggetti elenco in Amazon S3

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

Il codice precedente restituirà 2 chiavi dopo il contrassegno. Ma non riesco a creare il pulsante precedente. C'è qualcosa che potrebbe restituire le 2 chiavi precedenti prima dell'indicatore? Oppure puoi suggerire una soluzione migliore. Sto usando PHP SDK. Grazie

risposta

3

L'API di AWS S3 non ha alcun parametro che specifica di restituire gli elementi prima dell'indicatore. Nella versione più recente dell'API, è stato rinominato nel parametro start-after che sottolinea il fatto che si ottengono solo elementi accanto al valore del parametro.

Per implementare il pulsante Indietro è preferibile memorizzare un elenco sequenziale di marcatori per una richiesta specifica in DB o cache. Ci potrebbero essere 3 colonne per esempio:

request_hash | marker_key | previous_marker_key 

elaborazione della richiesta corrente è possibile aggiungere le righe al tavolo e prendere le righe. Ecco alcuni pseudo-code come potrebbe apparire:

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