I\'m trying to upload a file on AWS S3 by using Java-AWS API. The problem is my application is unable to upload large sized files because the heap is reaching its limit. Err
I strongly recommend to setContentLength()
on ObjectMetadata
, since:
..If not provided, the library will have to buffer the contents of the input stream in order to calculate it.
(..which predictably will lead to OutOfMemory on "sufficient large" files.)
source: PutObjectRequest javadoc
Applied to your code:
// ...
ObjectMetadata omd = new ObjectMetadata();
// a tiny code line, but with a "huge" information gain and memory saving!;)
omd.setContentLength(file.length());
s3Client.putObject(new PutObjectRequest(ABuck, AFkey, file.getInputStream(), omd).withCannedAcl(CannedAccessControlList.PublicRead));
// ...
You need to add example code to get a proper answer. If you are dealing with a large object, use TransferManager to upload rather than doing putObject.