2012-02-17 93 views
12

我正在使用AWS IOS SDK并尝试列出文件夹中的所有文件。Amazon AWS IOS SDK:如何列出文件夹中的所有文件名称

此代码的工作列出一个桶中的所有文件等:

-(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); 
} 

} 

所以,如果我通过bucketName名字,这个工程。但是,如果我试图通过bucketName/FOLDERNAME“我得到一个错误信息。此代码似乎并不像桶和文件夹路径组合的组合。

任何想法表示赞赏。

回答

21

亚马逊S3是一个”扁平化”的文件系统,这意味着它没有物理文件夹‘文件夹’正如你所知道的只是前缀添加到文件名。

您需要的prefix属性设置为你的要求(见documentation

例如,给定以下一组文件:

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

如果设置prefixfolderName1,和你的delimiter/,你应该只得到前两项。

最后,但并非最不重要的,留下您的bucketName只能用水桶名:)在S3 Developer Guide

更多信息。

+0

太棒了。谢谢Viccari – Jeremy 2012-02-17 21:57:13

+6

实际上,为了达到这个目的,你必须将前缀设置为“folderName1 /”。在阅读文档之前,我并不清楚前缀必须包含分隔符才能工作...... – vdaubry 2012-06-10 07:40:59

+1

需要注意的另一件事:结果集被截断为1000.检查isTruncated标志并运行连续请求用一个标记来说明最后获得的物体。 – Stavash 2014-04-16 10:56:07

相关问题