2016-12-28 17 views
1

私はs3バケットの下にフォルダをリストしようとしています。問題はS3ブラウザツールを使って4つのフォルダを見ることができますが、バケツの下のフォルダのリストを取得するのにjava/scalaコードを使用すると、 1つのフォルダ。単純なAWS-JAVA-SDKを使用して次のコードを使用しました。S3 java APIがフォルダを正しく一覧表示していません。

val awsCreds: BasicAWSCredentials = new BasicAWSCredentials(accessKey, accessSecret) 
val s3: AmazonS3 = new AmazonS3Client(awsCreds) 
val listObjectsRequest = new ListObjectsRequest() 
     .withBucketName(bucketName).withPrefix(prefix) 
     .withDelimiter(delimiter); 
val objectListing = s3.listObjects(listObjectsRequest); 
val directories = objectListing.getCommonPrefixes 
println(directories.mkString(",")) 

それは1つのフォルダのみ/ステージング

を印刷し、私もawsScalaライブラリを試してみましたが、次のコード

val bucket = s3.bucket("prod-tapp").get 
val summaries=s3.ls(bucket, "/") 
summaries.foreach(println(_)) 

しかし、同じ結果を使用していました。

Windows上のaws s3ブラウザのデスクトップアプリケーションを使用して正しいフォルダが表示されます。ここに結果のスクリーンショットがあります。 enter image description here

ご提案がありますか?

おかげ

+0

すべての「フォルダ」にファイルが含まれていますか?私はあなたがフォルダにS3が本当に存在しないことを理解していると思う - むしろ、Common Prefixesはパスに基づいてオブジェクトをグループ化する方法として使用されます。 –

+0

はい、すべてのフォルダにファイルが含まれています。 – user3313379

+0

'デリミタ=="/"'ですか? –

答えて

0

私はあなたが接頭辞で区切り文字(/)を含めていないことを推測しています。

私は次のコードを実行します(Javaのが、本当に重要ではありません)場合:

public class S3Prefix { 

    private static final AmazonS3Client s3 = new AmazonS3Client(); 

    public static void main(String[] args) { 
     Arrays.asList(null, "test1", "test1/").forEach(S3Prefix::listPrefix); 
    } 

    public static void listPrefix(String prefix) { 
     System.out.println("Listing prefix '" + prefix + "'"); 
     final ListObjectsV2Result result = s3.listObjectsV2(new ListObjectsV2Request() 
       .withPrefix(prefix) 
       .withBucketName("raniz-prefix-test") 
       .withDelimiter("/")); 

     System.out.println("\tCommon prefixes"); 
     result.getCommonPrefixes().forEach(p -> System.out.println("\t\t" + p)); 

     System.out.println("\tKeys"); 
     result.getObjectSummaries().forEach(s -> System.out.println("\t\t" + s.getKey())); 
    } 
} 

私は次のような出力を得る:あなたが見ることができるように、それは含めることが重要です

Listing prefix 'null' 
    Common prefixes 
     test1/ 
     test2/ 
     test3/ 
    Keys 
Listing prefix 'test1' 
    Common prefixes 
     test1/ 
    Keys 
Listing prefix 'test1/' 
    Common prefixes 
    Keys 
     test1/ 
     test1/bar.txt 
     test1/foo.txt 

をその "フォルダ"の内容を一覧表示する場合は、プレフィックスの区切り文字を入力します。

関連する問題