In this quick article, we’re going to explore the AWS support provided in the Spring Cloud platform – focusing on 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:
@Autowired ResourcePatternResolver resourcePatternResolver; 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.