使用Boto3在S3中的AWS内容类型设置

时间:2015-12-31 19:24:21

标签: python amazon-web-services amazon-s3

我正在尝试使用Amazon的heap for Python将网页上传到S3存储桶。

我无法设置Content-Type。 AWS除了使用此代码指定的元数据密钥外,还为Content-Type创建新的元数据密钥:

# Upload a new file
data = open('index.html', 'rb')
x = s3.Bucket('website.com').put_object(Key='index.html', Body=data)
x.put(Metadata={'Content-Type': 'text/html'})

非常感谢有关如何将Content-Type设置为text/html的任何指导。

3 个答案:

答案 0 :(得分:30)

Content-Type不是自定义元数据,这是Metadata的用途。它有自己的属性,可以像这样设置:

bucket.put_object(Key='index.html', Body=data, ContentType='text/html')

注意:.put_object()可以设置的不只是Content-Type。其余的请查看Boto3 documentation

答案 1 :(得分:17)

您也可以使用upload_file()方法和ExtraArgs关键字(并将权限设置为World read):

import boto3
s3 = boto3.resource('s3')
s3.meta.client.upload_file('source_file_name.html', 'my.bucket.com', 'aws_file_name.html', ExtraArgs={'ContentType': "application/json", 'ACL': "public-read"} )

答案 2 :(得分:1)

此处,data是已打开的文件,而不是其内容:

# Upload a new file
data = open('index.html', 'rb')

要读取(二进制)文件:

import io

with io.open("index.html", mode="rb") as fd:
    data = fd.read()

这样会更好。