使用Spring Boot从AWS S3检索文件的最佳方法?

时间:2017-08-18 03:27:31

标签: spring amazon-web-services spring-boot amazon-s3

我正在使用PostgreSQL作为数据库和S3存储桶作为图像存储的Spring启动应用程序。保存新条目时,我将图像上传到S3存储桶并将其名称保存到DB。要从S3存储桶中检索图像,我需要在视图中添加URL模式,如下所示:

<img th:src="@{'https://s3.us-east-2.amazonaws.com/MYBUCKETNAME/test/'+${entry.image}}" height="256" width="256"/>

但是,要查看图像,我需要为&#34;测试&#34;制作所有传入的文件。通过向S3存储桶添加新策略来公开文件夹,如下所示:

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "AllowPublicRead",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::MYBUCKETNAME/test/*"
    }
]

}

问题:

  1. 这是一种保存方法吗?
  2. 我可以用不同的方式检索文件吗?

2 个答案:

答案 0 :(得分:1)

您可以为S3存储桶配置CDN,并直接从边缘位置提供图像。

了解AWS CDN

https://aws.amazon.com/caching/cdn/

创建CloudFront分配时,将MYBUCKETNAME.s3.amazonaws.com指定为此分配的源服务器。 CloudFront将d111111abcdef8.cloudfront.net作为s3存储桶的url返回。

您可以从以下链接获取更多信息

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LinkFormat.html#Format_BasicLinks

答案 1 :(得分:1)

你做得很好。所有你需要确保的是,不允许列出桶的内容即。如果我们输入 https://s3.us-east-2.amazonaws.com/MYBUCKETNAME/test/ 在浏览器上,它不应列出此文件夹中的所有文件名。

正如Mohan所说;您还可以配置CDN(在s3存储桶前)来检索文件;但这只是为了改善客户的加载时间..但这需要额外的配置和成本,并且只有在拥有大量地理位置分散的客户时才有用。