AWS分页listObjects node.js

您好,我目前希望列表中的图像使用分页的商店。 我需要每次显示指定数量的图像,并允许循环停止在我指定的页码上。 (例如,每页30个图像,我需要第3页,我将需要列出图像的第3页)。 到目前为止,它遍历所有的文件,我只需要根据pageCount列出objectsPerPage

(GET / list / {storeid}?page = {pageNumber}&per_page = {perPage}

var shopId = event.shopkeeper + "/"; var objectsPerPage = event.perPage; var pageCount = event.pageNumber; var params = { Bucket: AWS_Bucket, Delimiter: '/', Prefix: shopId, MaxKeys: objectsPerPage }; var dataContents = []; function s3ListObjects() { s3.listObjects(params, function(err, data) { if (err) { console.log("listS3Objects Error:", err); } else { var contents = data.Contents; dataContents = dataContents.concat(contents); if (data.IsTruncated) { params.Marker = contents[contents.length-1].Key; s3ListObjects(params, callback); } else { console.log(dataContents); } } }); } 

我最终做的解决scheme是创build一个pageCountervariables,并将连续令牌转换为整数值。 然后随着文件循环提供页数而增加。 一个简单的if语句也被构造,以便当pageCount等于所请求的页面时,它将console.log输出数据。

 var s3DataContents = []; var pageCounter = 0; function s3ListObjects() { s3.listObjectsV2(params, function(err, data) { if (err) { console.log("listS3Objects Error:", err); } else { if(data.IsTruncated) { if(pageCounter == page){ s3DataContents = data.Contents; s3DataContents.forEach(function(content){ let dates = new Date(content.LastModified).toLocaleString(); let str = content.Key; str = str.split(shopId).pop(); return console.log("name: " + str + ";" + " created: " + dates + ";" + " size: " + content.Size + ";"); }); } else { //if more files then iterate through params.ContinuationToken = data.NextContinuationToken; s3ListObjects(params, callback); //convert string into integer value params.ContinuationToken = parseInt(pageCounter); pageCounter++; } } else { callback("Images not found " + err); } } });