【发布时间】:2025-11-23 14:00:02
【问题描述】:
我正在尝试使用 Java-AWS API 在 AWS S3 上上传文件。问题是我的应用程序无法上传大型文件,因为堆已达到其限制。 错误:java.lang.OutOfMemoryError: Java 堆空间
我个人认为扩展堆内存不是一个永久的解决方案,因为我必须上传高达 100 GB 的文件。我该怎么办?
这里是sn-p的代码:
BasicAWSCredentials awsCreds = new BasicAWSCredentials(AID, Akey);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(Regions.fromName("us-east-2"))
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
InputStream Is=file.getInputStream();
boolean buckflag = s3Client.doesBucketExist(ABuck);
if(buckflag != true){
s3Client.createBucket(ABuck);
}
s3Client.putObject(new PutObjectRequest(ABuck, AFkey,file.getInputStream(),new ObjectMetadata() ).withCannedAcl(CannedAccessControlList.PublicRead));
【问题讨论】:
-
你
ObjectMetadta.setContentLength(fileLength),当 outOfMem 发生时? from javadoc: "..如果没有提供,库必须缓冲输入流的内容以便计算它。" -
请将您的代码添加到问题中。否则我们只能猜测,但不能真正帮助您。
-
我已经添加了代码。 @Codo
-
@xerx593 我没有提供文件长度。我应该对代码进行哪些更改?
-
请看我的回答 *.com/a/64263423/1704634 ,它使用 S3OutputStream 自动切换到分段上传,以防流太大。当前使用 10MB 缓冲区,但这可以配置得更小/更大。
标签: java amazon-web-services spring-boot amazon-s3