AmazonS3JavaAPI只下载50个对象

AmazonS3JavaAPI只下载50个对象,java,amazon-s3,amazon,Java,Amazon S3,Amazon,这让我头疼,所以我想我应该发布简单的解决方案。 我的问题是,在Amazon的S3上使用JavaAPI时,我只能下载50个对象,然后它就会神秘地超时。代码如下所示: int counter = 0; AmazonS3Client s3 = new AmazonS3Client(propertiesFile); while(objectList.isTruncated()){ for(S3ObjectSummary objectSummary : objectList.getObjectSummar

这让我头疼,所以我想我应该发布简单的解决方案。 我的问题是,在Amazon的S3上使用JavaAPI时,我只能下载50个对象,然后它就会神秘地超时。代码如下所示:

int counter = 0;
AmazonS3Client s3 = new AmazonS3Client(propertiesFile);
while(objectList.isTruncated()){
for(S3ObjectSummary objectSummary : objectList.getObjectSummaries()){
    System.out.println(++counter);
    S3Object object = s3.getObject(new GetObjectRequest(bucketName, objectSummary.getKey()));
//do stuff
}
}

它将运行并处理正好50个对象的所有内容,然后超时。

无论出于何种原因,主要问题是我已将s3声明为
AmazonS3Client s3
。应该是这样的:

AmazonS3 s3 = new AmazonS3Client(propertiesFile);

以防其他人遇到此问题。

希望在调用getObject下载时,不要关闭InputStream。通过调用getObject()进行选择;处理每个对象后,必须关闭InputStream

更多详情请阅读:)


感谢Scala开发人员,这里有一个递归函数,可以使用官方的

import com.amazonaws.services.s3.AmazonS3Client
导入com.amazonaws.services.s3.model.{S3ObjectSummary,ObjectListing,GetObjectRequest}
导入scala.collection.JavaConversions.{collectionAsScalaIterable=>asScala}
defmap[T](s3:AmazonS3Client,bucket:String,prefix:String)(f:(S3ObjectSummary)=>T){
def扫描(acc:List[T],listing:ObjectListing):List[T]={
val summaries=asScala[S3ObjectSummary](listing.getObjectSummaries())
val mapped=(对于(摘要(s.getKey、s.getOwner、s.getSize))
将返回该bucket/前缀中的
(键、所有者、大小)
元组的完整列表

val totalSize=map(s3,“bucket”,“prefix”)(s=>s.getSize)
将返回其内容的总大小(请注意在表达式末尾应用的附加
sum()
折叠函数;-)

您可以将
map()