2012-02-10 6 views
7

Estoy usando django storage con el backend s3boto. Según este número, http://code.larlet.fr/django-storages/issue/5/s3botostorage-set-content-type-header-acl-fixed-use-http-and-disable-query-auth-by Tengo un grupo de archivos (todos ellos) que tienen el tipo de contenido 'application/octet-stream'. Dado que tengo una instancia de <class 'boto.s3.key.Key'>, ¿cómo puedo configurar content_type?Utilizando boto, establezca content_type en los archivos que ya están presentes en s3

In [29]: a.file.file.key.content_type 
Out[29]: 'application/octet-stream' 

In [30]: mimetypes.guess_type(a.file.file.key.name)[0] 
Out[30]: 'image/jpeg' 

In [31]: type(a.file.file.key) 
Out[31]: <class 'boto.s3.key.Key'> 

Respuesta

16

No hay forma de modificar el tipo de contenido (o cualquier otro metadato) asociado a un archivo después de que se haya creado. Sin embargo, puede copiar el archivo en el servidor y modificar los metadatos en el proceso. Aquí es una esencia en github que debe ayudar:

https://gist.github.com/1791086

Contenido:

import boto 

s3 = boto.connect_s3() 
bucket = s3.lookup('mybucket') 
key = bucket.lookup('mykey') 

# Copy the key onto itself, preserving the ACL but changing the content-type 
key.copy(key.bucket, key.name, preserve_acl=True, 
    metadata={'Content-Type': 'text/plain'}) 

key = bucket.lookup('mykey') 
print key.content_type 

Mitch

Cuestiones relacionadas