Amazon SDK提供的S3读取接口listObjects()是分页读取,默认每次返回1000个对象。
因此需要翻页遍历出所有的对象。
private LinkedList<S3ObjectSummary> allObjectList = new LinkedList<S3ObjectSummary>();
public void download(){
ListObjectsRequest listObjectsRequest = new
ListObjectsRequest().withBucketName(bucketName).
withPrefix(orderNumber+"_");
ObjectListing objects = MyAccout.amazonS3.listObjects(listObjectsRequest);
getAllListKey(objects);
for(S3ObjectSummary objectSummary :allObjectList) {
String objectKey=objectSummary.getKey();
GetObjectRequest rangeObjectRequest =new GetObjectRequest(bucketName, objectKey);
S3Object object = MyAccout.amazonS3.getObject(rangeObjectRequest);
object.getObjectContent();
.....
}
}
/**
* 返回所有Key
*/
private void getAllKey(ObjectListing current) {
this.allObjectList.addAll(current.getObjectSummaries());//第一页
while (current.isTruncated()) {
current = MyAccout.amazonS3.listNextBatchOfObjects(current);//翻页
this.allObjectList.addAll(current.getObjectSummaries());//最后一页
}
}