'Permission Denied' when getting images on S3 from Grails
我有一个 grails 2.1.1 应用程序正在访问存储在 s3 上的存储桶中的图像,我正在使用 Grails-AWS 插件访问它。
当我使用"grails run-app"并且服务器是 localhost:8080/myApp 时,一切正常。我可以毫无问题地放置和获取文件。
但是,当我将 war 文件部署到 Amazon Elastic Beanstalk 时,尝试获取图像时出现以下错误:
1 2 3 4 5 6 7 | java.io.FileNotFoundException: 90916.png (Permission denied) at java.io.FileOutputStream.<init>(FileOutputStream.java:209) at java.io.FileOutputStream.<init>(FileOutputStream.java:160) at com.sommelier.domain.core.MyDomainObject.getPicture(MyDomainObject.groovy:145) |
这是我获取引发错误的图像的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
我已将我的 s3 存储桶的权限设置为尽可能开放。我使用了"添加更多权限"按钮并添加了所有可能的选项。
这是我的存储桶策略:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | { "Version":"2008-10-17", "Id":"Policy1355414697022", "Statement": [ { "Sid":"AllowPublicRead", "Effect":"Allow", "Principal": { "AWS":"*" }, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::mybucket/*" }, { "Sid":"", "Effect":"Allow", "Principal": { "AWS":"*" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::mybucket/*" } ] } |
还有我的 CORS 配置:
1 2 3 4 5 6 7 8 | <CORSConfiguration> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>Authorization</AllowedHeader> </CORSRule> </CORSConfiguration> |
有什么想法吗?这是 S3 权限问题,还是有其他问题?
您似乎正在尝试创建您没有写入权限的文件。
最好不要将副本保存到应用服务器。如果可以的话,我建议您从内存中的对象返回操作/内容/任何内容。
但是如果你真的因为某种原因在本地需要这个文件,你应该在 /tmp
有写权限