2016-11-25 16 views
0

オブジェクト:AWS S3 - リストのみルートレベルは、私は、以下のフォルダ構造とS3バケットを持つ

<bucket-name> 
    folder1/ 
     .... 
    folder2/ 
     .... 
    foldern/ 
     .... 

これらの各フォルダは、私が唯一folder1, folder2 etc.

を記載されているトップレベルのフォルダをしたい、その中のファイルを持っています

私は以下のJavaスニペットでやろうとしている正確に何である、私は区切り文字と空の接頭辞として"/"を使用示唆ソリューションの多くを発見した:

ListObjectsRequest listObjects = new ListObjectsRequest() 
      .withDelimiter("/") 
      .withPrefix("") 
      .withBucketName(s3BucketName); 
    ObjectListing objects = s3.listObjects(listObjects); 
    for (S3ObjectSummary summ : objects.getObjectSummaries()) { 
     System.out.println(summ.getKey()); 
    } 

forループはキーを印刷しません。私が間違っていることがあるのでしょうか、そうでないのですか?

答えて

0

ここにはC#バージョンがあります。ポートを非常に簡単にする必要があります:

public List<string> GetBucketRootItems(string bucketName, string regionName) 
    { 
     List<string> result = new List<string>(); 
     try 
     { 
      using (var client = new AmazonS3Client(RegionEndpoint.GetBySystemName(regionName))) 
      { 
       ListObjectsV2Request request = new ListObjectsV2Request 
       { 
        BucketName = bucketName, 
        MaxKeys = 10000, 
        Delimiter = "/", 
        Prefix = "" 
       }; 

       ListObjectsV2Response response; 
       do 
       { 
        response = client.ListObjectsV2(request); 
        result.AddRange(response.CommonPrefixes); 
        request.ContinuationToken = response.NextContinuationToken; 
       } 
       while (response.IsTruncated == true); 
      } 
     } 
     catch (AmazonS3Exception amazonS3Exception) 
     { 
      if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") 
       || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) 
      { 
       log.Error($"Check the provided AWS Credentials."); 
      } 
      else 
      { 
       log.Error($"Error occurred. Message:'{amazonS3Exception.Message}' when listing objects", amazonS3Exception); 
      } 
     } 
     return result; 
    } 

これは動作するようです。

ListObjectsRequest listObjectsRequest = new ListObjectsRequest() 
             .withBucketName(bucketName) 
             .withDelimiter("/"); 
ObjectListing objectListing = client.listObjects(listObjectsRequest); 
List<String> commonPrefixes = objectListing.getCommonPrefixes(); 

あなたが唯一の区切り文字を設定すると、共通の接頭辞から読み取る必要があります。私は、私は(Javaで)次のようにトップレベルのフォルダを一覧表示する管理だけで10000のエントリ

+0

である私はそれが古いポストである知っているが、私は同じ問題を持っていた答えを考え出しました。 – ginalster

0

の下になりました。

私が現在使用しているSDKのバージョンは1.10.14

<dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk</artifactId> 
     <version>1.10.14</version> 
    </dependency> 
関連する問題