c# - How can I non-recursively browse the contents of a directory with the AWS S3 API? -
c# - How can I non-recursively browse the contents of a directory with the AWS S3 API? -
say have next directories , files in amazon s3 bucket (files in bold):
bucketname/ bucketname/folder1/ bucketname/folder1/foobar.txt bucketname/folder1/subfolder1/ bucketname/folder1/subfolder1/hello.txt bucketname/folder1/subfolder2/ bucketname/folder1/subfolder2/world.txt bucketname/folder1/subfolder2/subsubfolder1/ bucketname/folder1/subfolder2/subsubfolder1/file.txthow can list objects , immediate subdirectories of given directory .net aws s3 api, without recursively getting below directory? in other words, how can "browse" contents of directory @ single level?
for example, imagine want browse contents of bucketname/folder1/
. see following:
...and nil else. don't want list files , directories in subdirectories, want list files , subdirectories @ folder1
level.
is there way apply filters single aws api phone call doesn't homecoming everything , forcefulness me manually parse need?
i've found code let's me immediate subdirectories (as intended), can't figure out how include immediate files too:
var request = new listobjectsrequest() .withbucketname("bucketname") .withprefix(@"folder1/") .withdelimiter(@"/"); using (var client = amazon.awsclientfactory.createamazons3client(accesskey, secretkey)) using (var response = client.listobjects(request)) { foreach (var item in response.commonprefixes) { /* ... */ } }
i had opposite problem (i knew how files in specified folder, not subdirectories).
the reply amazon lists files differently sub-folders.
sub-folders listed, illustration shows, in listobjectsresponse.commonprefixes collection.
files listed in listobjectsresponse.s3objects collection.
so code should this:
var request = new listobjectsrequest() .withbucketname("bucketname") .withprefix(@"folder1/") .withdelimiter(@"/"); using (var client = amazon.awsclientfactory.createamazons3client(accesskey, secretkey)) using (var response = client.listobjects(request)) { foreach (var subfolder in response.commonprefixes) { /* list sub-folders */ } foreach (var file in response.s3objects) { /* list files */ } }
my google search turned post on burningmonk blog in comment section:
when create listobjects request, list top level folders, don’t set prefix set delimiter ‘/’, inspect ‘commonprefixes’ property on response folders in top folder.
to list contents of ‘rootfolder’, create request prefix set name of folder plus backslash, e.g. ‘rootfolder/’ , set delimiter ‘/’. in response you’ll have folder element same key prefix used in request, plus subfolders in ‘commonprefixes’ property.
c# .net amazon-s3
Comments
Post a Comment