2015-08-26 5 views
0

Я пытаюсь реализовать два метода: один для загрузки файлов на s3, а другой для загрузки файлов.Не удается загрузить файлы с amazon s3

Функции обновления работают, однако, когда я пытаюсь загрузить один из обновленных файлов, я получаю ошибку 404, которая говорит, что у меня нет разрешения.

Разрешение на ведро установлено для всех разрешений для любого зарегистрированного пользователя, но когда файл создается с помощью кода, файл создается с разрешения только для одного пользователя.

Кто-нибудь знает, как изменить права на созданный файл?

вот обновления и загрузки:

from boto.s3.connection import S3Connection 
from boto.s3.key import Key 

def upload_file(bucket_name, new_file_name_in_bucket, local_file_path): 

    print "connecting to s3" 
    conn = S3Connection(AWS_ACCESS_KEY, AWS_SECRET_KEY) 
    print 'successfully connected to s3' 
    print 'getting bucket' 
    amazon_bucket = conn.get_bucket(bucket_name) 
    print 'successfully got bucket' 

    print 'uploading the file' 
    key = Key(amazon_bucket) 
    key.key = new_file_name_in_bucket 

    # this line will crash 
    # if this line would not exist the code would pass, however the file credentials would be for one user only. 
    key.set_acl('authenticated-read-write') 

    key.set_contents_from_filename(local_file_path) 


def download_file(bucket_name, file_name): 

    print "connecting to s3" 
    conn = S3Connection(AWS_ACCESS_KEY, AWS_SECRET_KEY) 
    print 'successfully connected to s3' 
    print 'getting bucket' 
    amazon_bucket = conn.get_bucket(bucket_name) 
    print 'successfully got bucket' 

    print 'downloading file' 

    # Note the if validate will not be set to False, it will crash here 
    key = amazon_bucket.get_key(file_name, validate=False) 

    # This is the line where the error is raised 
    key.get_contents_to_filename(key.name) 
    conn.close() 

    return key 
+0

Вы используете те же учетные данные AWS, чтобы загрузить файл и загрузить файл? Кроме того, вы могли бы показать точную ошибку, которую вы получаете? '' 404'' означает '' Not Found'' и не обязательно является проблемой разрешений. – garnaat

ответ

1

Через несколько часов проб и ошибок мне удалось исправить ошибку.

По-видимому, когда создается ведро и все учетные данные установлены для каждого аутентифицированного пользователя, этого недостаточно.

Я также должен был указать политику ведра, чтобы читать его.

Политика я использовал:

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

И исправили проблему.