2016-05-27 10 views
0

Ich versuche, eine neue Metadaten-Informationen zu einem S3-Objekt hinzufügen, damit ich weiß, was sind alle Objekte, die ich bereits verarbeitet habe. Aber aus irgendeinem Grund sind die neuen Daten, die ich hinzugefügt habe, nicht persistent. Wenn ich das Programm verlasse, ist es nicht mehr da. Ich sehe das neue Feld in den alten Daten nicht "verarbeitet", aber ich sehe, dass es in den neuen Daten vorhanden ist. Ich erwarte, dass das neu hinzugefügte Metadatenfeld permanent auf dem Objekt präsentieren, aber es ist weg, nachdem ich das Programm beendenHinzufügen von Metadaten auf Amazon S3-Objekt ist nicht persistent

 ObjectMetadata objMetaData = new ObjectMetadata(); 
     objMetaData = s3.getObjectMetadata(bucketName,prefix); 
     Map<String, String> map = new HashMap<String, String>(); 
     Map<String, String> newMap = new HashMap<String, String>(); 
     map = objMetaData.getUserMetadata(); 
     System.out.println("old Meta data is " + map.toString()); 
     objMetaData.addUserMetadata("x-amz-meta-processed", "true"); 
     newMap = objMetaData.getUserMetadata(); 
     System.out.println("New processed data is" +newMap.toString()); 
+0

Sie scheinen nur die Metadaten lokal zu ändern, also warum ist das eine Überraschung? – jonrsharpe

+0

Muss ich putObject erneut ausführen, damit diese neuen Metadaten stattfinden? Ich dachte, addUserMetadata sollte die neuen Daten automatisch hinzufügen, ohne das gesamte Objekt erneut einfügen zu müssen, nur um einige Benutzermetadaten hinzuzufügen. Bitte klären Sie, ob ich das falsch verstehe. – user2593186

+0

Nun, gibt es ein 's3.setObjectMetadata'? – jonrsharpe

Antwort

0

Ich vermute, Ihre Verwirrung kommt von nicht einen wichtigen Teil des Designs von S3 zu verstehen:

  • S3-Objekte können nicht geändert werden, und auch ihre Metadaten können nicht geändert werden. Es ist alles unveränderlich.

Warten Sie, was? Es ist technisch wahr.

Die einzige Möglichkeit, Objektmetadaten zu ändern, besteht darin, eine Kopie des Objekts zu erstellen und die Metadaten festzulegen.

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html

Sie können in der Praxis „add“ Metadaten zu einem Objekt, aber was die wirklich bedeutet, dass Sie S3 sind bitten, eine Kopie des Objekts zu machen, mit dem gleichen Schlüssel für die Quelle und das Ziel, aber "unterschiedliche" Metadaten verwendend.

Wenn die "unterschiedlichen" Metadaten, die Sie für das Objekt haben möchten, bereits vorhandene Metadaten enthalten, müssen Sie diese in die Anfrage aufnehmen.

S3 unterstützt das Kopieren eines Objekts auf sich selbst, sodass Sie das Objekt nicht erneut hochladen müssen.

Was Sie jetzt tun, ist nur die Werte in den Datenstrukturen Ihres lokalen Codes zu ändern.