亚马逊S3只返回1000个条目的一斗,大家为另一桶(使用Java SDK)?亚马逊、目的、Java、SDK

2023-09-11 09:23:55 作者:26.暮烟疏雨时光

我使用下述code,以获得从S3存储所有文件名列表。我有两个桶的S3。对于低于code水桶之一返回所有的文件名(大于1000),但同样的code只返回1000再斗文件名。我只是不明白发生了什么。 为什么同样的$ C一斗$ C运行,而不是其他?

也是我的桶有层次结构的文件夹/ filename.jpg。

  ObjectListing对象= s3.listObjects(bucket.new.test);
                做 {

                    为(S3ObjectSummary objectSummary:objects.getObjectSummaries()){
                        字符串键= objectSummary.getKey();
                        的System.out.println(键);


                    }
                    对象= s3.listNextBatchOfObjects(对象);
                }而(objects.isTruncated());
 

解决方案

我刚刚更改上述code使用的的addAll ,而不是使用的的循环添加对象一个接一个,它为我工作。 code变化为:

 名单,其中,S3ObjectSummary>键列表=新的ArrayList< S3ObjectSummary>();
        ObjectListing对象= s3.listObjects(bucket.new.test);
        键列表= object.getObjectSummaries();
        对象= s3.listNextBatchOfObjects(对象);

        而(object.isTruncated()){
            keyList.addAll(current.getObjectSummaries());
            对象= s3.listNextBatchOfObjects(电流);
        }
        keyList.addAll(object.getObjectSummaries());
 

之后,你可以简单地使用任何iterater名单上的键列表

神秘的东方种子,让亚马逊上的中国卖家被团灭

I am using below mentioned code to get list of all file names from s3 bucket. I have two bucket in s3. For one of the bucket below code returns all the file names (more than 1000), but the same code returns only 1000 file names for another bucket. I just don't get what is happening. Why same code running for one bucket and not for other ?

Also my bucket have hierarchy structure folder/filename.jpg.

ObjectListing objects = s3.listObjects("bucket.new.test");
                do {

                    for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
                        String key = objectSummary.getKey();
                        System.out.println(key);


                    }
                    objects = s3.listNextBatchOfObjects(objects);
                } while (objects.isTruncated());

解决方案

I have just change above code to use addAll instead of using for loop to add object one by one and it worked for me. Code changes are as:

        List<S3ObjectSummary> keyList = new ArrayList<S3ObjectSummary>();
        ObjectListing object = s3.listObjects("bucket.new.test");
        keyList = object.getObjectSummaries();
        object = s3.listNextBatchOfObjects(object);

        while (object.isTruncated()){
            keyList.addAll(current.getObjectSummaries());
            object = s3.listNextBatchOfObjects(current);
        }
        keyList.addAll(object.getObjectSummaries());

After that you can simply use any iterater over list keyList.