我正在使用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/*"
}
]
}
问题:
答案 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存储桶前)来检索文件;但这只是为了改善客户的加载时间..但这需要额外的配置和成本,并且只有在拥有大量地理位置分散的客户时才有用。