2015-12-31 13 views
8

Python için Amazon'un Boto3 SDK'u kullanarak bir S3 kovasına bir web sayfası yüklemeye çalışıyorum.AWS İçerik Türü S3'ü Kullanma Boto3'ü Kullanma

Content-Type ayarında sorun yaşıyorum. AWS Bu kodu kullanarak belirterek ediyorum birine ek olarak Content-Type için yeni bir meta veri anahtarı oluşturarak tutar:

# 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/html için Content-Type büyük takdir nasıl ayarlanacağı Herhangi rehberlik.

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

bir (ikili) dosyasını okumak için:

import io 

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

Böylesi daha iyi olacak

İşte

cevap

18

Content-Type ne için kullanıldığını Metadata olduğunu özel meta değildir. Böyle ayarlanabilir kendi özelliği vardır:

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

Not: .put_object() sadece Content-Type daha ayarlayabilirsiniz. Diğerleri için Boto3 documentation'a bakın.

+0

Teşekkürler! Bunu yayınlamadan yaklaşık 10 dakika önce anladım! –

1

, data değil içeriği, açık bir dosyadır.

+1

teşekkür ederiz. Yine de "binary/octet-stream" olarak yükleniyor. –

8

Sen upload_file() yöntem ve ExtraArgs anahtar kelimeyle bunu (ve Dünya yanı okumak için izinlerini ayarlamak) de yapabilirsiniz: mesajınız için

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

Yanlış cevap, 'Content-Type' değil 'x-amz-meta-contenttype' = 'application/json' ayarlayacaktır. – doanduyhai