使用boto,在s3上已存在的文件上设置content_type

时间:2012-02-10 16:21:41

标签: python django amazon-s3 boto

我正在使用带有s3boto后端的django存储。根据这个问题,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 个答案:

答案 0 :(得分:16)

创建文件后,无法修改与文件关联的内容类型(或任何其他元数据)。但是,您可以在服务器端复制文件并修改该过程中的元数据。这是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

米奇