2013-05-07 13 views
8

Ho tentato questo:Come posso ottenere boto per generare URL firmati per S3 che attivano i download?

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

ma quando provo a visitare l'URL firmato ottengo questo messaggio:

La firma richiesta abbiamo calcolato non corrisponde alla firma che hai fornito. Controlla la tua chiave e il metodo di firma.

Se rimuovo l'attributo headers d'altra parte, posso accedere all'immagine bene. Che cosa sto facendo di sbagliato?

risposta

7

Il problema è che non è possibile impostare intestazioni arbitrarie utilizzando generate_url e mentre l'opzione response_headers esiste, AWS ha anche opzioni limitate su ciò che è possibile impostare. Questo farà ciò che è previsto in questo caso.

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