aws - boto3 python upload to s3
¿Cómo cargar un archivo en S3 y hacerlo público utilizando boto3? (3)
Puedo subir un archivo de imagen usando:
s3 = session.resource(''s3'')
bucket = s3.Bucket(S3_BUCKET)
bucket.upload_file(file, key)
Sin embargo, quiero hacer el archivo público también. Intenté buscar algunas funciones para configurar ACL para el archivo, pero parece que boto3 modificó su API y eliminó algunas funciones. ¿Hay alguna manera de hacerlo en la última versión de boto3?
Para cargar y configurar permisos para que se puedan leer públicamente en un solo paso, puede utilizar:
bucket.upload_file(file, key, ExtraArgs={''ACL'':''public-read''})
Pude hacerlo usando la API objectAcl:
s3 = boto3.resource(''s3'')
object_acl = s3.ObjectAcl(''bucket_name'',''object_key'')
response = object_acl.put(ACL=''public-read'')
Para más detalles: http://boto3.readthedocs.io/en/latest/reference/services/s3.html#objectacl
El camino de Adi funciona. Sin embargo, si fuera como yo, es posible que se haya topado con un problema de acceso denegado. Esto normalmente es causado por permisos rotos del usuario. Lo arreglé agregando lo siguiente a la matriz de Action
:
"s3:GetObjectAcl",
"s3:PutObjectAcl"