AWS S3 SDK 2.x提供了在上传文件时低内存消耗且无需使用临时文件的选项。我们可以通过以下方式实现:
S3Client s3Client = S3Client.builder().region(Region.US_WEST_2).build();
File fileToUpload = new File("example.txt");
InputStream fileStream = new FileInputStream(fileToUpload);
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
.bucket("my-bucket")
.key("example-key")
.build();
// 使用TransferManager上传文件
TransferManager transferManager = TransferManagerBuilder.standard().s3Client(s3Client).build();
Upload upload = transferManager.upload(putObjectRequest, fileStream);
upload.waitForCompletion();
通过使用TransferManager上传文件,我们可以避免内存溢出和临时文件的使用。另外,我们还可以使用以下方法上传文件,这也能够实现同样的效果:
S3Client s3Client = S3Client.builder().region(Region.US_WEST_2).build();
File fileToUpload = new File("example.txt");
InputStream fileStream = new FileInputStream(fileToUpload);
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
.bucket("my-bucket")
.key("example-key")
.build();
// 使用ManagedUpload上传文件
S3Response s3Response = s3Client.putObject((PutObjectRequest reviewRequest, AsyncRequestBody.fromInputStream(fileStream, fileToUpload.length()))
这些选项都能够帮助我们在上传文件时减少内存消耗并且避免在本地生成临时文件。