2013-05-07 17 views
8

Mam próbował to:W jaki sposób mogę uzyskać boto do generowania podpisanych adresów URL dla S3, które wyzwalają pobieranie?

connection = S3Connection(
    aws_access_key_id=settings.AWS_ACCESS_KEY_ID, 
    aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY) 

url = connection.generate_url(
    60, 
    'GET', 
    settings.AWS_STORAGE_BUCKET_NAME, 
    self.get_object().image, 
    headers={'Content-Type': 'application/octet-stream'}) 

ale gdy próbuję odwiedzić podpisane URL otrzymuję komunikat:

Podpis prośba obliczyliśmy nie pasuje do podpisu, który podałeś. Sprawdź swój klucz i metodę podpisywania.

Jeśli z drugiej strony usuniemy atrybut headers, mogę uzyskać dostęp do obrazu. Co ja robię źle?

Odpowiedz

7

Problem polega na tym, że nie można ustawić arbitralnych nagłówków za pomocą generate_url, a gdy istnieje opcja response_headers AWS ma również ograniczone opcje co do tego, co można ustawić. To zrobi to, czego oczekuje się w tym przypadku.

url = connection.generate_url(
    60, 
    'GET', 
    settings.AWS_STORAGE_BUCKET_NAME, 
    self.get_object().image, 
    response_headers={ 
     'response-content-type': 'application/octet-stream' 
    }) 
Powiązane problemy