3

In a spring boot application I read an image file from a remote service, which returns byte array and in headers I can check what is file extension:

ResponseEntity<byte[]> result = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class);

Now I want to put this byte array in a S3 bucket in a folder which I decide during run time, for example folder name can base don current timestamp. I checked AmazonS3 class, but it doesnt seem to have any such API which can help me?

How can this be done?

Mandroid
  • 6,200
  • 12
  • 64
  • 134

3 Answers3

4

As per example from documentation: https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/examples-s3-objects.html#upload-object

// Put Object. here 'bytes' is byte array.
PutObjectResponse   response = s3.putObject(PutObjectRequest.builder().bucket(bucketName).key(filePathLocation).build(),RequestBody.fromBytes(bytes));
Sadique
  • 140
  • 8
1

You can use the MinIO java S3 client. Here you can find the documentation.

The code will look something like the following one:

MinioClient minioClient =
          MinioClient.builder()
              .endpoint("https://play.min.io")
              .credentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG")
              .build();

StringBuilder builder = new StringBuilder();
      for (int i = 0; i < 1000; i++) {
        builder.append(
            "Sphinx of black quartz, judge my vow: Used by Adobe InDesign to display font samples. ");
        builder.append("(29 letters)\n");
        builder.append(
            "Jackdaws love my big sphinx of quartz: Similarly, used by Windows XP for some fonts. ");
        builder.append("(31 letters)\n");
        builder.append(
            "Pack my box with five dozen liquor jugs: According to Wikipedia, this one is used on ");
        builder.append("NASAs Space Shuttle. (32 letters)\n");
        builder.append(
            "The quick onyx goblin jumps over the lazy dwarf: Flavor text from an Unhinged Magic Card. ");
        builder.append("(39 letters)\n");
        builder.append(
            "How razorback-jumping frogs can level six piqued gymnasts!: Not going to win any brevity ");
        builder.append("awards at 49 letters long, but old-time Mac users may recognize it.\n");
        builder.append(
            "Cozy lummox gives smart squid who asks for job pen: A 41-letter tester sentence for Mac ");
        builder.append("computers after System 7.\n");
        builder.append(
            "A few others we like: Amazingly few discotheques provide jukeboxes; Now fax quiz Jack! my ");
        builder.append("brave ghost pled; Watch Jeopardy!, Alex Trebeks fun TV quiz game.\n");
        builder.append("---\n");

// Create a InputStream for object upload.
        ByteArrayInputStream bais = new ByteArrayInputStream(builder.toString().getBytes("UTF-8"));

        // Create object 'my-objectname' in 'my-bucketname' with content from the input stream.
        minioClient.putObject(
            PutObjectArgs.builder().bucket("my-bucketname").object("my-objectname").stream(
                    bais, bais.available(), -1)
                .build());
        bais.close();
        System.out.println("my-objectname is uploaded successfully");

The full code can be found here.

Dina Bogdan
  • 4,345
  • 5
  • 27
  • 56
-4

Checkout the AWS JAVA SDK:

Here the getting started section:

https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/getting-started.html

In order to use in Spring context use the Maven dependency:

https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/setup-project-maven.html

Uploading an object to S3 Bucket:

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-objects.html#upload-object

import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;


System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    s3.putObject(bucket_name, key_name, new File(file_path));
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
Francesco Iannazzo
  • 596
  • 2
  • 11
  • 31