Подтвердить что ты не робот

Как получить предыдущую страницу объектов списка в Amazon S3

Я успешно создал следующую кнопку для перечисления объектов в ведро Amazon S3. Каждый раз, когда пользователь нажимает кнопку NEXT, будут возвращены только две клавиши. Код выглядит следующим образом

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

Приведенный выше код вернет 2 ключа после маркера. Но я не могу создать предыдущую кнопку. Есть ли что-нибудь, что могло бы вернуть предыдущие 2 ключа перед маркером? Или вы можете предложить лучшее решение. Я использую PHP SDK. Благодаря

4b9b3361

Ответ 1

API AWS S3 API не имеет параметров, указывающих возврат элементов перед маркером. В новейшей версии API marker был переименован в параметр start-after, который подчеркивает тот факт, что вы получаете только элементы рядом с значением параметра.

Чтобы реализовать предыдущую кнопку, вы должны сохранить последовательный список маркеров для конкретного запроса в БД или кеше. Например, могут быть три столбца:

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