我試圖設置S3靜態網站託管,但它似乎在任何沒有在AWS控制檯中設置的Content-Type
元數據字段的對象上返回403。我無法弄清楚如何使用AWS CLI工具來做到這一點。如何在使用AWS CLI上傳到S3時設置Content-Type?
使用--metadata
選項似乎工作:
$ 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"
}
}
但是在對象上的Content-Type
場是不可見的AWS控制檯的「元數據」部分中,我也得到一個403試圖訪問時該文件在瀏覽器中。
使用--content-type
選項也不起作用:
$ 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": {}
}
雖然它似乎設置某種特殊ContentType
財產,仍然沒有在AWS控制檯Content-Type
元數據字段,我也不能在瀏覽器中訪問該文件。
我也試過類似的命令(aws s3 cp
,aws s3 sync
),沒有運氣。我將存儲桶策略設置爲公共可讀。
如果我省略'--acl public-read'參數,這不起作用。有沒有辦法讓鎖定訪問某個IP範圍的工作,就像我在存儲桶策略中所做的那樣? –
不要緊,看起來這個設置已經完全符合我的要求:即使對象ACL設置爲「public-read」,存儲桶策略仍然適用。 –