Cer*_*rin 9 python amazon-s3 boto
如何通过Python boto模块在启用了Webhosting的S3帐户中设置文件的内容类型?
我正在做:
from boto.s3.connection import S3Connection
from boto.s3.key import Key
from boto.cloudfront import CloudFrontConnection
conn = S3Connection(access_key_id, secret_access_key)
bucket = conn.create_bucket('mybucket')
b = conn.get_bucket(bucket)
b.set_acl('public-read')
fn = 'index.html'
template = '<html>blah</html>'
k = Key(b)
k.key = fn
k.set_contents_from_string(template)
k.set_acl('public-read')
k.set_metadata('Content-Type', 'text/html')
Run Code Online (Sandbox Code Playgroud)
但是,当我从http://mybucket.s3-website-us-east-1.amazonaws.com/index.html访问它时,我的浏览器会提示我下载该文件,而不是简单地将其作为网页提供.
查看S3 Management控制台中的元数据显示Content-Type实际上已将其设置为"application/octet-stream".如果我在控制台中手动更改它,我可以正常访问该页面,但如果我再次运行我的脚本,它会将其重置为错误的内容类型.
我究竟做错了什么?
gar*_*aat 17
该set_metadata方法实际上是用于在S3对象上设置用户元数据.许多标准HTTP元数据字段具有表示它们的第一类属性,例如content_type.此外,您希望在将对象实际发送到S3之前设置元数据.这样的事情应该有效:
import boto
conn = boto.connect_s3()
bucket = conn.get_bucket('mybucket') # Assumes bucket already exists
key = bucket.new_key('mykey')
key.content_type = 'text/html'
key.set_contents_from_string(mystring, policy='public-read')
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在将对象写入S3时设置预制ACL策略,这样可以节省必须进行另一次API调用.
| 归档时间: |
|
| 查看次数: |
6338 次 |
| 最近记录: |