12

In AWS Java SDK 1.x, I could get an S3Object from an S3Client like this.

S3Object obj = mS3Client.getObject(pBucket, pKey);

I'm trying to replicate that functionality using AWS Java SDK 2.0 (and end up with an S3Object), but the closest I can get is a GetObjectResponse, and I can't find any simple method calls to turn the response into an S3Object.

GetObjectResponse response = mS3Client.getObject(
        GetObjectRequest.builder()
                .bucket(pBucket)
                .key(pKey)
                .build())
        .response();

How can I get an S3Object from the 2.0 S3Client, or build one from the GetObjectResponse?

the_storyteller
  • 2,335
  • 1
  • 26
  • 37

2 Answers2

7

use ResponseInputStream. Hope the below code solves your problem.

GetObjectRequest request = GetObjectRequest.builder()
    .bucket("BucketName")
    .key("key")
    .build();
ResponseInputStream<GetObjectResponse> s3objectResponse = s3Client
    .getObject(request);
BufferedReader reader = new BufferedReader(new InputStreamReader(s3objectResponse));

String line;            
while ((line = reader.readLine()) != null) {            
    System.out.println(line);
}
Onema
  • 7,331
  • 12
  • 66
  • 102
Swaminathan S
  • 211
  • 3
  • 11
  • 1
    For many different ways of converting from `InputStream` to `String`, see https://stackoverflow.com/q/309424/150884 – hertzsprung May 28 '21 at 12:05
  • This is helpful, but doesn't show how to get an instance of `S3Object` like the question is asking. – Jake Jul 14 '23 at 12:28
0

Same issue here, but I had to return byte array of content.

public byte[] getContent(String bucketName, String keyInBucket) {
    // Get Client
    S3Client s3client = getS3Client();
    // Get S3 Object
    GetObjectRequest getObjectRequest = GetObjectRequest.builder()
        .bucket(bucketName)
        .key(keyInBucket)
        .build();
    // As Byte array 
    ResponseBytes<GetObjectResponse> response = s3client.getObject(getObjectRequest, ResponseTransformer.toBytes());
    return response.asByteArray();
}
Camille
  • 2,439
  • 1
  • 14
  • 32