Spring Cloud AWS – S3

1. Simple S3 Download

Let’s start by easily accessing files stored on S3:

@Autowired
ResourceLoader resourceLoader;

public void downloadS3Object(String s3Url) throws IOException {
    Resource resource = resourceLoader.getResource(s3Url);
    File downloadedS3Object = new File(resource.getFilename());
 
    try (InputStream inputStream = resource.getInputStream()) {
        Files.copy(inputStream, downloadedS3Object.toPath(), 
          StandardCopyOption.REPLACE_EXISTING);
    }
}

2. Simple S3 Upload

We can also upload files:

public void uploadFileToS3(File file, String s3Url) throws IOException {
    WritableResource resource = (WritableResource) resourceLoader
      .getResource(s3Url);
 
    try (OutputStream outputStream = resource.getOutputStream()) {
        Files.copy(file.toPath(), outputStream);
    }
}

3. S3 URL Structure

The s3Url is represented using the format:

s3://<bucket>/<object>

For example, if a file bar.zip is in the folder foo on a my-s3-bucket bucket, then the URL will be:

s3://my-s3-bucket/foo/bar.zip

And, we can also download multiple objects at once using ResourcePatternResolver and the Ant-style pattern matching:

private ResourcePatternResolver resourcePatternResolver;
 
@Autowired
public void setupResolver(ApplicationContext applicationContext, AmazonS3 amazonS3) {
    this.resourcePatternResolver = 
      new PathMatchingSimpleStorageResourcePatternResolver(amazonS3, applicationContext);
 }

public void downloadMultipleS3Objects(String s3Url) throws IOException {
    Resource[] allFileMatchingPatten = this.resourcePatternResolver
      .getResources(s3Url);
        // ...
    }
}

URLs can contain wildcards instead of exact names.

For example the s3://my-s3-bucket/**/a*.txt URL will recursively look for all text files whose name starts with ‘a‘ in any folder of the my-s3-bucket.

Note that the beans ResourceLoader and ResourcePatternResolver are created at application startup using Spring Boot’s auto-configuration feature.

4. Conclusion

And we’re done – this is a quick and to-the-point introduction to accessing S3 with Spring Cloud AWS.

In the next article of the series, we’ll explore the EC2 support of the framework.

As usual, the examples are available over on GitHub.

Related posts:

New in Spring Security OAuth2 – Verify Claims
Java Program to Find the Connected Components of an UnDirected Graph
Guide to the ConcurrentSkipListMap
Java Program to Implement Hash Tables
Java Program to Implement Best-First Search
Java 8 Streams peek() API
Compact Strings in Java 9
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Setting a Request Timeout for a Spring REST API
Guide to the Java TransferQueue
Java Program to Implement Quick Sort Using Randomization
How To Serialize and Deserialize Enums with Jackson
“Stream has already been operated upon or closed” Exception in Java
Java Program to Implement Ford–Fulkerson Algorithm
Constructor Dependency Injection in Spring
Using the Not Operator in If Conditions in Java
Hướng dẫn Java Design Pattern – Transfer Object
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
Constructor Injection in Spring with Lombok
Getting Started with Stream Processing with Spring Cloud Data Flow
Java Program to Implement AVL Tree
Merging Streams in Java
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Working with Tree Model Nodes in Jackson
Java Program to Check whether Graph is Biconnected
Java Program to Implement Disjoint Set Data Structure
Object cloning trong java
Lớp TreeMap trong Java
Java Program to Perform Quick Sort on Large Number of Elements
Using Custom Banners in Spring Boot
Difference Between Wait and Sleep in Java