我正在尝试使用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
的任何指导。
答案 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()
这样会更好。