2016-04-24 5 views
0

Ich verwende derzeit JSON API Java-Bibliothek, um Objekte in Google Cloud Storage hochzuladen und versucht, die Berechtigung des Objekts, das hochgeladen wird, zu ändern. Wenn ich zum ersten Mal die Datei laden, gibt es drei Standard-Dateiberechtigungen, die ist:Google Cloud-Objekt-Berechtigung verschwinden

Projektinhaber-projectId BESITZER

Projektredakteuren projectId BESITZER

Projekt Zuschauer-projectId BESITZER

Nach dem Hochladen habe ich versucht, meinen Code zu verwenden, um eine neue Datei hinzuzufügen, damit alle Benutzer als Leser darauf zugreifen können. Mein Code lautet:

StorageObject objectMetadata = new StorageObject(); 

// set access control 
List<ObjectAccessControl> acl = Lists.newArrayList(); 
acl.add(new ObjectAccessControl().setEntity("allUsers").setRole("READER")); 
objectMetadata.setAcl(acl); 
Storage.Objects.Update req = client.objects().update(Bucket, file, objectMetadata); 
req.execute(); 

jedoch nach dem Code erfolgreich ausgeführt, die drei Standard-Dateiberechtigungen ist weg und stattdessen ist es ersetzen mit:

Benutzer allusers Reader

Obwohl dies die ich Datei Erlaubnis wollte einstellen, die ursprüngliche 3-Datei-Berechtigung ist weg. Gibt es eine Möglichkeit, es so zu machen, dass meine 3 Standard-Dateiberechtigung beibehalten wird und diese neue Dateiberechtigung hat? Jede Hilfe wird geschätzt.

Antwort

0

Der Aufruf "objects.update()" setzt die gesamten Metadaten Ihres Objekts. Ihr Code erstellt leere Metadaten, fügt die Berechtigung "allUsers -> READER" hinzu und legt die Metadaten des Objekts auf diese neuen Metadaten fest, weshalb alle anderen Berechtigungen (und alle anderen Metadaten, die Sie für das Objekt festgelegt haben) verloren gehen.

Sie wollten eine Berechtigung hinzufügen, ohne die Metadaten zu ändern. Es gibt mehrere gute Möglichkeiten, das zu erreichen, aber am direktesten ist es, stattdessen "objectAccessControls(). Insert()" aufzurufen: