2015-12-31 80 views
8

我嘗試使用Amazon的Boto3 SDK for Python將網頁上傳到S3存儲桶。S3中的AWS內容類型設置使用Boto3

我在設置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-Typetext/html將不勝感激任何指導。

回答

18

Content-Type不是定製元數據,這是Metadata用於什麼。它有自己的屬性,它可以設置這樣的:

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

注:.put_object()可以設置不僅僅是Content-Type更多。其餘的請查看Boto3 documentation

+0

謝謝!在你發佈之前大約10分鐘,我想到了! –

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() 

這將是更好的方式。

+1

感謝您的留言。它仍然以「binary/octet-stream」的形式上傳。 –

8

您也可以與upload_file()方法和ExtraArgs關鍵字做到這一點(和設置權限爲世界閱讀以及):

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"}) 
+0

錯誤的答案,它會設置'x-amz-meta-contenttype'='application/json',而不是'Content-Type' – doanduyhai