Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Amazon AWS IOS SDK: How to list ALL file names in a FOLDER

Tags:

ios

amazon-s3

I'm using AWS IOS SDK and trying to list all the files in a FOLDER.

This code works to list all files etc in a BUCKET:

-(void) s3DirectoryListing: (NSString *) bucketName {

    s3Client = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY];

    @try {

        S3ListObjectsRequest *req = [[S3ListObjectsRequest alloc] initWithName:bucketName];

        S3ListObjectsResponse *resp = [s3Client listObjects:req];

        NSMutableArray* objectSummaries = resp.listObjectsResult.objectSummaries;  

        for (int x = 0; x < [objectSummaries count]; x++) {
            NSLog(@"objectSummaries: %@",[objectSummaries objectAtIndex:x]);
        }
    }
    @catch (NSException *exception) {
    NSLog(@"Cannot list S3 %@",exception);
}

}

So if I pass a bucketName name, this works. However if I try and pass bucketName/folderName" I get an error message. This code doesn't seem to like the combination of bucket and folder path combinations.

Any ideas appreciated.

like image 960
Jeremy Avatar asked Feb 17 '12 13:02

Jeremy


People also ask

How do I make a .AWS folder?

If you open a command prompt, cd to the directory you want it created in, and run "mkdir . aws" then it will create it. You can also create them in the explorer.

How do I view contents of a S3 bucket?

Sign in to the AWS Management Console and open the Amazon S3 console at https://console.aws.amazon.com/s3/ . In the Buckets list, choose the name of the bucket that contains the object. In the Objects list, choose the name of the object for which you want an overview. The object overview opens.


1 Answers

Amazon S3 is a "flat" file system, meaning it does not have physical folders. "Folders" as you know are simply prefixes added to file names.

You need to set the prefix property to your request (see the documentation)

For example, given the following set of files:

folderName1/fileNameA.txt
folderName1/fileNameB.txt
folderName2/folderName3/fileNameC.txt

If you set prefix with folderName1, and your delimiter with /, you should get only the first two entries.

Last, but not least, leave your bucketName only with the bucket name :)

More info at the S3 Developer Guide.

like image 119
Viccari Avatar answered Oct 07 '22 13:10

Viccari