72 votes

Comment télécharger un fichier sur S3 et le rendre public en utilisant boto3?

Je peux télécharger un fichier image en utilisant:

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

Cependant, je veux aussi rendre le fichier public. J'ai essayé de rechercher certaines fonctions pour définir l'ACL pour le fichier, mais il semble que boto3 ait modifié son API et supprimé certaines fonctions. Existe-t-il un moyen de le faire dans la dernière version de boto3?

121voto

Bill Baker Points 451

Pour télécharger et définir une autorisation lisible publiquement en une seule étape, vous pouvez utiliser:

bucket.upload_file(file, key, ExtraArgs={'ACL':'public-read'})

47voto

Adi Points 156

J'ai pu le faire en utilisant l'API objectAcl:

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

Pour plus de détails: http://boto3.readthedocs.io/en/latest/reference/services/s3.html#objectacl

10voto

Rohan Bagchi Points 1

La voie d'Adi fonctionne. Cependant, si vous étiez comme moi, vous pourriez avoir rencontré un problème d'accès refusé. Cela est généralement dû à des autorisations brisées de l'utilisateur. Je l'ai corrigé en ajoutant ce qui suit au tableau Action :

 "s3:GetObjectAcl",
"s3:PutObjectAcl"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X