У меня есть приложение grails 2.1.1, которое обращается к изображениям, хранящимся в корзине на s3, к которому я обращаюсь с помощью подключаемого модуля Grails-AWS.
Все работает нормально, когда я использую "grails run-app", а сервер - localhost: 8080 / myApp. Могу без проблем складывать и получать файлы.
Но когда я развертываю файл войны в Amazon Elastic Beanstalk, я получаю следующую ошибку при попытке получить изображение:
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)
Вот мой код для получения изображения, вызывающего ошибку:
File getPicture() {
def url = aws.s3().on("mybucket").url(image, "myfoldername")
File imageFile = new File(image)
def fileOutputStream = new FileOutputStream(imageFile)
def out = new BufferedOutputStream(fileOutputStream)
out << new URL(url).openStream()
out.close()
return imageFile
}
Я установил разрешения для своего ведра s3 настолько широко, насколько могу. Я использовал кнопку «Добавить разрешения» и добавил все возможные варианты.
Вот моя политика ведра:
{
"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:
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Есть предположения? Это проблема с разрешениями S3 или что-то еще?