12

我已成功创建了用于在 Amazon S3 存储桶中列出对象的下一个按钮。每次用户单击 NEXT 按钮时,只会返回两个键。代码如下

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

上面的代码将在标记之后返回 2 个键。但我无法创建上一个按钮。有什么东西可以在标记之前返回前两个键吗?或者你能建议任何更好的解决方案。我正在使用 PHP SDK。谢谢

4

1 回答 1

3

AWS S3 API 没有任何参数指定在标记之前返回项目。在最新版本的 API 中,它marker被重命名为start-after参数,强调您只能获得参数值旁边的项目。

要实现上一个按钮,您应该将特定请求的标记顺序列表存储在数据库或缓存中。例如,可能有 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']);
于 2017-10-04T14:02:18.490 回答