2012-02-17 4 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 /フォルダ名を渡す場合は、「私は、エラーメッセージが表示されます。このコードは、バケットとフォルダパスの組み合わせの組み合わせを好むようには見えません。

すべてのアイデアが高く評価した。

答えて

21

アマゾンS3があります」フラット」ファイルシステム、それは物理的なフォルダを持っていないという意味。 『フォルダ』あなたは、単に接頭辞がファイル名に追加されている知っている。

あなたはあなたの要求にprefixプロパティを設定する必要があります(documentationを参照)

たとえば、次のファイルセットがあるとします。

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

あなたは/folderName1prefixを設定し、あなたのdelimiter場合は、あなただけを取得する必要最初の2つのエントリ。

最後に、ではなく、少なくとも、唯一のバケット名を使用してbucketNameを残す:) S3 Developer Guide

詳細情報を。

+0

素晴らしい。ありがとうViccari – Jeremy

+6

これは実際には "folderName1 /"にプレフィックスを設定する必要があります。ドキュメントを読む前に私には分かりませんでした。 – vdaubry

+1

もうひとつ注意すべきこと:結果セットが1000で切り捨てられています。isTruncatedフラグをチェックし、連続したリクエストを実行します得られた最後の物体を示すためのマーカを付ける。 – Stavash

関連する問題