2015-04-15 17 views
7

S3 statik web sitesi barındırma hizmeti oluşturmaya çalışıyorum, ancak AWS konsolunda ayarlanmış Content-Type meta veri alanına sahip olmayan nesnelerimden herhangi birine 403 dönüyor gibi görünüyor. Bunu AWS CLI aracıyla nasıl yapacağımı anlayamıyorum. --metadata seçeneği kullanarakAWS CLI ile S3'e yüklerken Content-Type'u nasıl belirlerim?

çalışmak görünür:

$ aws s3api put-object --bucket <bucket> --key foo.html --body foo.html --metadata Content-Type=text/html 
{ 
    "ETag": "\"fd5ff7743e5ed1e1c304eb1c34e8e39f\"" 
} 
$ aws s3api head-object --bucket <bucket> --key foo.html 
{ 
    "AcceptRanges": "bytes", 
    "ContentType": "binary/octet-stream", 
    "LastModified": "Wed, 15 Apr 2015 06:39:48 GMT", 
    "ContentLength": 189, 
    "ETag": "\"fd5ff7743e5ed1e1c304eb1c34e8e39f\"", 
    "Metadata": { 
     "content-type": "text/html" 
    } 
} 

Ama nesne üzerinde Content-Type alan AWS konsolunun "Meta veri" bölümünde görünür değildir ve erişmeye çalışırken bir 403 almak Dosya bir tarayıcıda. o, hala AWS konsolunda bir Content-Type meta veri alanı yoktur özel ContentType mülkiyet çeşit ayarlamak için görünürken

$ aws s3api put-object --bucket <bucket> --key foo.html --body foo.html --content-type text/html 
{ 
    "ETag": "\"fd5ff7743e5ed1e1c304eb1c34e8e39f\"" 
} 
$ aws s3api head-object --bucket <bucket> --key foo.html 
{ 
    "AcceptRanges": "bytes", 
    "ContentType": "text/html", 
    "LastModified": "Wed, 15 Apr 2015 06:46:49 GMT", 
    "ContentLength": 189, 
    "ETag": "\"fd5ff7743e5ed1e1c304eb1c34e8e39f\"", 
    "Metadata": {} 
} 

, ne de yapabilirsiniz: --content-type seçeneği kullanarak

da çalışmıyor Dosyaya bir tarayıcıda erişin.

Ayrıca benzer komutlar denedim (aws s3 cp, aws s3 sync), şanssız. Herkese açık olarak okunabilir küme ilkesi var.

cevap

11

--content-type ile ikinci örneğiniz, bir nesnenin içerik türünü belirlemenin yoludur. Görüntülenen JSON yanıtı, ContentType anahtarına HTTP yanıtında Content-Type başlığını eşleştiriyor, ancak nesnenin gerçek Content-Type başlığına karşılık geliyor. --content-type kullanırken, içerik türü değerinin konsoldaki meta veri bölümünde gösterildiğini doğruladım.

Ayrıca
$ aws s3api put-object --bucket bucket --key foo.json --body foo.json --content-type application/json --acl public-read 

$ aws s3api head-object --bucket jamesls-test-sync --key foo.json 
{ 
    "AcceptRanges": "bytes", 
    "ContentType": "application/json", 
    "LastModified": "Wed, 15 Apr 2015 17:18:58 GMT", 
    "ContentLength": 0, 
    "ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"", 
    "Metadata": {} 
} 

curl kullanarak, içerik türü başlığı ayarlanır görebilirsiniz: AWS konsolunda

$ curl -I https://bucket.s3.amazonaws.com/foo.json 
HTTP/1.1 200 OK 
x-amz-id-2: ZlSg1aDUBu7z+9gWUg24uRn2TioI0hk2AGBBZ1iVbpUkv8RTrHWovzbHxL/y21Qe 
x-amz-request-id: 8568C73EB95EE5A6 
Date: Wed, 15 Apr 2015 17:20:42 GMT 
Last-Modified: Wed, 15 Apr 2015 17:18:58 GMT 
ETag: "d41d8cd98f00b204e9800998ecf8427e" 
Accept-Ranges: bytes 
Content-Type: application/json 
Content-Length: 0 
Server: AmazonS3 
+0

'--acl public-read 'parametresini çıkarırsam bu işe yaramaz. Kova politikamda yaptığım gibi, belirli bir IP aralığına erişimi kilitlerken bunu çalıştırmanın bir yolu var mı? –

+0

Unutmayın, bu kurulum zaten tam olarak istediğim şeyi yapıyor görünür: ACL nesnesi "public-read" olarak ayarlanmış olsa da, kova ilkesi hala geçerli. –

0

, size bile içerik türü ise istediğiniz içerik türü girebilirsiniz açılır listede listelenmiyor.

İlgili konular