2013-05-07 11 views
8

Ich habe dies versucht:Wie kann ich Boto dazu bringen, signierte URLs für S3 zu generieren, die Downloads auslösen?

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'}) 

aber wenn ich versuche, die signierte URL zu besuchen erhalte ich diese Meldung:

Die Anfrage Unterschrift wir die Unterschrift nicht Ihnen zur Verfügung gestellten berechnet entspricht. Überprüfen Sie Ihren Schlüssel und die Signiermethode.

Wenn ich das headers Attribut auf der anderen Seite entferne, kann ich auf das Bild gut zugreifen. Was mache ich falsch?

Antwort

7

Das Problem ist, dass Sie nicht beliebige Header mit generate_url festlegen können, und während die response_headers Option existiert AWS hat auch begrenzte Optionen, was Sie einstellen können. Dies wird tun, was in diesem Fall erwartet wird.

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