2012-02-10 25 views
7

Tôi đang sử dụng kho Django với phần phụ trợ s3boto. Theo sự cố này, http://code.larlet.fr/django-storages/issue/5/s3botostorage-set-content-type-header-acl-fixed-use-http-and-disable-query-auth-by Tôi có một loạt tệp (tất cả chúng) có loại nội dung 'application/octet-stream'. Cho rằng tôi có một thể hiện của <class 'boto.s3.key.Key'>, làm cách nào tôi có thể đặt content_type?Sử dụng boto, đặt content_type trên các tệp đã có trên 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'> 

Trả lời

16

Không có cách nào để sửa đổi loại nội dung (hoặc bất kỳ siêu dữ liệu nào khác) được kết hợp với tệp sau khi tệp được tạo. Tuy nhiên, bạn có thể sao chép tệp ở phía máy chủ và sửa đổi siêu dữ liệu trong quy trình. Dưới đây là một ý chính trên github rằng sẽ giúp:

https://gist.github.com/1791086

Nội dung:

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

Các vấn đề liên quan