在本文中,我們將探討在 Spring Cloud 平台上提供的 AWS 支持,重點關注 S3。
內容系列:
本文是系列的一部分
• Spring Cloud AWS – S3 (當前文章)
• Spring Cloud AWS – EC2
• Spring Cloud AWS – RDS
• Spring Cloud AWS – Messaging Support
1. 簡單 S3 下載
讓我們首先輕鬆地訪問存儲在 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. 簡單 S3 上傳
我們也可以上傳文件:
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 結構
s3Url 的表示方式如下:
s3://<bucket>/<object>例如,如果文件 bar.zip 位於 foo 文件夾中,並且存儲在 my-s3-bucket 存儲桶中,則 URL 將為:
s3://my-s3-bucket/foo/bar.zip我們還可以同時下載多個對象,使用 ResourcePatternResolver 以及 Ant 風格的模式匹配:
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);
// ...
}
}URL 可以包含通配符,而不是確切的名稱。
例如,URL s3://my-s3-bucket/**/a*.txt 將會遞歸地查找所有名稱以 ‘a’ 開頭,且位於 my-s3-bucket 任何文件夾中的文本文件。
請注意,Spring Boot 的自動配置功能在應用程序啓動時會創建 Bean ResourceLoader 和 ResourcePatternResolver。
4. 結論
我們完成了 – 這是一份快速且簡潔的介紹,説明如何使用 Spring Cloud AWS 訪問 S3。
在系列文章的下一篇中,我們將探討框架的 EC2 支持。
下一條 »
Spring Cloud AWS – EC2