27 votes

Comment faire pour modifier les métadonnées sur un objet dans Amazon S3

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.

33voto

natevw Points 3543

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

11voto

kartik Points 46

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);`

5voto

John Bachir Points 6203

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

1voto

user2395507 Points 11

Pour la première réponse, c'est une bonne idée d'inclure le type de contenu original dans les métadonnées, par exemple:

key.set_metadata('Content-Type', key.content_type) 

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