En Java, essayez cette
S3Object s3Object = amazonS3Client.getObject(bucketName, fileKey);
ObjectMetadata metadata = s3Object.getObjectMetadata();
Map customMetaData = new HashMap();
customMetaData.put("yourKey", "updateValue");
customMetaData.put("otherKey", "newValue");
metadata.setUserMetadata(customMetaData);
amazonS3Client.putObject(new PutObjectRequest(bucketName, fileId, s3Object.getObjectContent(), metadata));
Vous pouvez également essayer de copier un objet. Ici, les métadonnées ne seront pas copiées lors de la copie d'un objet. Vous devez obtenir les métadonnées de l'original et configurer pour copier la demande. Cette méthode est plus recommandé d'insérer ou de métadonnées de mise à jour d'un objet Amazon S3
ObjectMetadata metadata = amazonS3Client.getObjectMetadata(bucketName, fileKey);
ObjectMetadata metadataCopy = new ObjectMetadata();
metadataCopy.addUserMetadata("yourKey", "updateValue");
metadataCopy.addUserMetadata("otherKey", "newValue");
metadataCopy.addUserMetadata("existingKey", metadata.getUserMetaDataOf("existingValue"));
CopyObjectRequest request = new CopyObjectRequest(bucketName, fileKey, bucketName, fileKey)
.withSourceBucketName(bucketName)
.withSourceKey(fileKey)
.withNewObjectMetadata(metadataCopy);
amazonS3Client.copyObject(request);
L'en-tête x-amz-metadata-directive ne fonctionne pas. Il en résulte une non-concordance de signature à chaque fois. Tous les autres en-têtes x-amz fonctionnent bien. –