|
|
(JavaScript) S3 List Objects in Bucket Folder
Demonstrates how to retrieve the XML listing of the objects (i.e. files) stored in an Amazon S3 bucket, but just within a particular folder.
var success = false;
// This example assumes the Chilkat HTTP API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// In Amazon S3 (Simple Storage Service), there is a distinction between buckets and folders,
// which are both used for organizing and storing data.
// Bucket: A bucket is the top-level container in Amazon S3. It is similar to a directory or folder
// at the root level and acts as a unique namespace for your objects (files). Each bucket must have a globally
// unique name across all of Amazon S3. Buckets are created at the AWS account level and are used to store objects.
// Folder (Prefix): In Amazon S3, folders are not actual physical entities but are virtual constructs called prefixes.
// They are part of the object keys used to organize and group objects within a bucket. Object keys are essentially the
// full path or name of an object, including the folder structure. For example, if you have an object named
// "my-image.jpg" inside a folder named "photos," the object key would be "photos/my-image.jpg."
// Folders are helpful for organizing objects within a bucket and creating a hierarchical structure.
// In reality, S3 does not have a true folder structure. It stores objects in a flat structure with unique keys.
// However, the keys can include slashes ("/") to create a visual separation that resembles a folder structure.
// Various tools and S3 clients interpret the slashes as folder separators and display them accordingly.
var http = new CkHttp();
// Insert your access key here:
http.AwsAccessKey = "AWS_ACCESS_KEY";
// Insert your secret key here:
http.AwsSecretKey = "AWS_SECRET_KEY";
// ----------------------------------------------------------------------------------
// List the objects having prefix "images/"
// ----------------------------------------------------------------------------------
var strXml = http.S3_ListBucketObjects("chilkat100?prefix=images/");
if (http.LastMethodSuccess == false) {
console.log(http.LastErrorText);
return;
}
console.log("Response status code = " + http.LastStatus);
var xml = new CkXml();
success = xml.LoadXml(strXml);
if (success == false) {
console.log(xml.LastErrorText);
return;
}
// If the response status code was not 200, then the XML response is not a
// listing of objects, but instead contains error information.
if (http.LastStatus !== 200) {
console.log(xml.GetXml());
console.log("Failed.");
return;
}
// A sample response is shown below.
console.log(xml.GetXml());
console.log("----");
// Use this online tool to generate parsing code from sample XML:
// Generate Parsing Code from XML
// Iterate over the bucket items and get information for each..
var numItems = xml.NumChildrenHavingTag("Contents");
console.log("Number of bucket items = " + numItems);
var itemKey;
var itemSizeDecimalStr;
var lastModTimestamp;
var dt = new CkDateTime();
var dtObj = new CkDtObj();
var i = 0;
while (i < numItems) {
xml.I = i;
itemKey = xml.GetChildContent("Contents[i]|Key");
itemSizeDecimalStr = xml.GetChildContent("Contents[i]|Size");
lastModTimestamp = xml.GetChildContent("Contents[i]|LastModified");
dt.SetFromRfc822(lastModTimestamp);
// Get a local date/time.
var bLocal = true;
dt.ToDtObj(bLocal,dtObj);
console.log(i + ": " + itemKey + ", " + itemSizeDecimalStr + ", " + dtObj.Day + "-" + dtObj.Month + "-" + dtObj.Year + ":" + dtObj.Hour + ":" + dtObj.Minute);
i = i+1;
}
// Sample output from the above loop:
// 0: images/africa/, 0, 11-6-2020:20:18
// 1: images/africa/giraffe.jpg, 262769, 11-6-2020:20:20
// 2: images/africa/lion.jpg, 1026769, 11-6-2020:20:20
// 3: images/sea_creatures/starfish123.jpg, 6229, 19-1-2017:10:45
// 4: images/sea_creatures/starfish���.jpg, 6229, 19-1-2017:12:7
|