2012-02-17 91 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

相關問題