boto.s3: copy () для ключевого объекта теряет метаданные Content-Type - PullRequest
7 голосов
/ 04 февраля 2012

Вот пример кода копирования ключа S3.Есть много причин, по которым вы можете захотеть сделать это, одна из которых - обновить ключевые метаданные.И хотя это, кажется, является общепринятым решением для этого, есть большая проблема.Проблема заключается в том, что, когда я делаю приведенный ниже пример, я фактически теряю свой Content-Type, который по умолчанию возвращается к «application / octet-stream» (не очень полезно, если пытаюсь обслуживать веб-изображения).

# Get bucket
conn = S3Connection(self._aws_key, self._aws_secret)
bucket = conn.get_bucket(self._aws_bucket)

# Create key
k = Key(bucket)
k.key = key

# Copy old key
k.metadata.update({ meta_key: meta_value })
k2 = k.copy(k.bucket.name, k.name, k.metadata, preserve_acl=True)
k = k2

Есть идеи?Спасибо.

Ответы [ 2 ]

5 голосов
/ 09 июня 2012

У меня работает GitHub Gist :

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

Потребовалось много времени, чтобы бежать!

1 голос
/ 27 января 2014

взгляните на эту запись

нужно сделать

key = bucket.get_key(key.name)

, то:

metadata['Content-Type'] = key.content_type will work

в противном случае key.content_type вернет application/octet-stream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...