Search code examples
pythonamazon-s3botoboto3

How to upload a file to S3 and make it public using boto3?


I am able to upload an image file using:

s3 = session.resource('s3')
bucket = s3.Bucket(S3_BUCKET)
bucket.upload_file(file, key)

However, I want to make the file public too. I tried looking up for some functions to set ACL for the file but seems like boto3 have changes their API and removed some functions. Is there a way to do it in the latest release of boto3?


Solution

  • I was able to do it using objectAcl API:

    s3 = boto3.resource('s3')
    object_acl = s3.ObjectAcl('bucket_name','object_key')
    response = object_acl.put(ACL='public-read')
    

    For details: http://boto3.readthedocs.io/en/latest/reference/services/s3.html#objectacl