2013-01-10 49 views
12

Tôi đã tạo thành công nút tiếp theo để liệt kê các đối tượng trong thùng chứa S3 của Amazon. Mỗi lần người dùng sẽ bấm vào nút NEXT chỉ có hai phím sẽ được trả về. Mã như sauCách lấy trang trước của các đối tượng danh sách trong Amazon S3

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

Mã trên sẽ trả lại 2 khóa sau điểm đánh dấu. Nhưng tôi không thể tạo nút trước đó. Có bất kỳ thứ gì có thể trả về 2 khóa trước đó trước điểm đánh dấu không? Hoặc bạn có thể đề xuất bất kỳ giải pháp nào tốt hơn. Tôi đang sử dụng PHP SDK. Cảm ơn

Trả lời

3

API AWS S3 không có bất kỳ thông số nào xác định để trả về các mục trước điểm đánh dấu. Trong phiên bản API mới nhất, đã được đổi tên thành thông số start-after nhấn mạnh rằng bạn chỉ nhận được các mục bên cạnh giá trị tham số.

Để triển khai nút Trước, bạn nên lưu trữ một danh sách các điểm đánh dấu tuần tự cho một yêu cầu cụ thể trong DB hoặc bộ nhớ cache. Có thể có 3 cột ví dụ:

request_hash | marker_key | previous_marker_key 

Xử lý yêu cầu hiện tại bạn có thể thêm hàng vào bảng và tìm nạp hàng. Dưới đây là một số mã giả như thế nào nó có thể trông giống như:

$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']); 
Các vấn đề liên quan