Si vous avez déjà téléchargé un objet à un compartiment Amazon S3, comment voulez-vous modifier les métadonnées à l'aide de l'API? Il est possible de le faire dans AWS Management Console, mais il n'est pas clair comment il pourrait être fait par programmation. Plus précisément, je suis en utilisant le nom de boto API en Python et à la lecture de la source, il est clair que l'utilisation de la clé.set_metadata ne fonctionne qu' avant la création de l'objet qu'il a juste les effets d'un local dictionnaire.
Réponses
Trop de publicités?Il semble que vous devez remplacer l'objet avec lui-même, à l'aide d'une "METTRE l'Objet (Copie)" avec un "x-amz-métadonnées-directive: REMPLACER" en-tête de plus pour les métadonnées. Dans boto, ce qui peut être fait comme ceci:
k = k.copy(k.bucket.name, k.name, {'myKey':'myValue'}, preserve_acl=True)
Notez que les métadonnées que vous n'incluez pas dans le dictionnaire sera abandonné. Afin de préserver les vieux attributs que vous aurez besoin de faire quelque chose comme:
k.metadata.update({'myKey':'myValue'})
k2 = k.copy(k.bucket.name, k.name, k.metadata, preserve_acl=True)
k2.metadata = k.metadata # boto gives back an object without *any* metadata
k = k2;
J'ai failli rater cette solution, à laquelle il est fait allusion dans l'intro d'une manière incorrecte intitulé de la question qui fait il s'agit d'un problème différent à cette question: Amazon S3 pour Ajouter des MÉTADONNÉES à CLÉ existante
Afin de définir les métadonnées sur S3 fichiers, il suffit de ne pas fournir l'emplacement cible et il va fonctionner.Seule Source d'information est suffisant.
final ObjectMetadata metadata = new ObjectMetadata();
metadata.addUserMetadata(metadataKey, value);
final CopyObjectRequest request = new CopyObjectRequest(bucketName, keyName, bucketName, keyName)
.withSourceBucketName(bucketName)
.withSourceKey(keyName)
.withNewObjectMetadata(metadata);
s3.copyObject(request);`
Vous pouvez modifier les métadonnées sans re-uloading l'objet à l'aide de la commande copier. Voir cette question: Est-il possible de modifier les en-têtes sur un S3 objet sans téléchargement de la totalité de l'objet