Hi I am currently wanting to list images within a store with the use of pagination. I need to display a specified number of images each time and allow the loop to stop on the page number i have specified. (example. 30 images per page and I need page 3 I will need to list the 3rd page of images). So far it iterates through all the files, I just need to list objectsPerPage depending on the pageCount
(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);
}
}
});
}
A solution that I eventually did was create a pageCounter variable and converted the continuation tokens into integer values. This then incremented as the files are looped through providing a page count. A simple if statement is also constructed so that when the pageCount is equal to the page requested it will console.log out the data.
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);
}
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.