How do I set Content-Type when uploading to S3 with AWS CLI?
Your second example with --content-type
is the way to set content type for an object. The JSON response displayed is mapping the Content-Type
header in the HTTP response to the ContentType
key, but it corresponds to the actual Content-Type
header of the object. I confirmed that the content type value does show up in the metadata section in the console when using --content-type
.
$ 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": {}
}
Also using curl, we can see the content type header is set:
$ 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
In the AWS console, you can key in the content-type that you want even if the content-type is not listed in the drop-down.
This is not what the OP was looking for, but Google sends a lot of people here.
If you are wanting to set the content type of an object that is already on S3 without having to upload the --body
again, see How to change content type of Amazon S3 Objects