Используя boto, установите content_type для файлов, которые уже присутствуют на s3 - PullRequest
7 голосов
/ 10 февраля 2012

Я использую хранилища django с бэкэндом s3boto. Что касается этой проблемы, http://code.larlet.fr/django-storages/issue/5/s3botostorage-set-content-type-header-acl-fixed-use-http-and-disable-query-auth-by У меня есть куча файлов (все они), которые имеют тип содержимого «application / octet-stream». Учитывая, что у меня есть экземпляр <class 'boto.s3.key.Key'>, как я могу установить content_type?

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

1 Ответ

16 голосов
/ 10 февраля 2012

Нет способа изменить тип содержимого (или любые другие метаданные), связанные с файлом, после его создания.Однако вы можете скопировать файл на стороне сервера и изменить метаданные в процессе.Вот краткое описание github:

https://gist.github.com/1791086

Содержание:

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

Митч

...