'Permission Denied' при получении изображений на S3 из Grails

У меня есть приложение 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 или что-то еще?


person Phil Turner    schedule 25.12.2012    source источник
comment
Думаю, эта ссылка: forum.aws.amazon.com/message.jspa?messageID = 205071 может оказаться полезным. Просто не уверен в этом.   -  person coderLMN    schedule 26.12.2012


Ответы (1)


Похоже, вы пытаетесь создать файл, в котором у вас нет разрешения на запись.

Лучше не сохранять копию на сервере приложений. Если вы можете, я предлагаю вам вернуть манипуляцию / контент / что угодно из объекта в памяти.

Но если вам действительно нужен файл локально по какой-то причине, у вас должно быть разрешение на запись в / tmp.

person Ray Vahey    schedule 26.12.2012
comment
Вы правы по обоим пунктам. Проблема заключалась не в разрешениях на S3, а в моей локальной файловой системе. И вы правы, что мне не нужно было ничего писать. Мой новый метод getPicture теперь выглядит так: Image getPicture () {def url = aws.s3 (). On (mybucket) .url (image, myfolder) Toolkit.getDefaultToolkit (). CreateImage (url); } Спасибо за помощь! - person Phil Turner; 26.12.2012