python - How do I set the Content-Type of an existing S3 key with boto3? -


i want update content-type of existing object in s3 bucket, using boto3, how do that, without having re-upload file?

    file_object = s3.object(bucket_name, key)     print file_object.content_type     # binary/octet-stream     file_object.content_type = 'application/pdf'     # attributeerror: can't set attribute 

is there method have missed in boto3?

related questions:

there doesn't seem exist method in boto3, can copy file overwrite itself.

to using aws low level api through boto3, this:

s3 = resource('s3') api_client = s3.meta.client response = api_client.copy_object(bucket=bucket_name,                                   key=key,                                   contenttype="application/pdf",                                   metadatadirective="replace",                                   copysource=bucket_name + "/" + key) 

the metadatadirective="replace" turns out required s3 overwrite file, otherwise error message saying this copy request illegal because trying copy object without changing object's metadata, storage class, website redirect location or encryption attributes. .

or can use copy_from, pointed out jordon phillips in comments:

s3 = boto3.resource("s3") object = s3.object(bucket_name, key) object.copy_from(copysource={'bucket': bucket_name,                              'key': key},                  metadatadirective="replace",                  contenttype="application/pdf") 

Comments

Popular posts from this blog

sequelize.js - Sequelize group by with association includes id -

android - Robolectric "INTERNET permission is required" -

java - Android raising EPERM (Operation not permitted) when attempting to send UDP packet after network connection -