2015-12-31 31 views
8

AmazonのBoto3 SDKをPythonに使用してS3バケットにWebページをアップロードしようとしています。S3でのAWSコンテンツタイプの設定Boto3を使用して

Content-Typeの設定に問題があります。 AWSは、私はこのコードを使用して指定しています1に加えて、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'}) 

text/htmlContent-Typeを設定する方法の任意の指導をいただければ幸いです。ここで

答えて

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は開いたファイルではなく、その内容である:それはそのように良くなる

import io 

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

:(バイナリ)ファイルを読むには

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

+1

感謝を。それはまだ "バイナリ/オクテットストリーム"としてアップロードされています。 –

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

間違った答えは 'Content-Type'ではなく 'x-amz-meta-contenttype' = 'application/json' – doanduyhai

関連する問題