Objektversionierung verwenden

Zu den Konzepten

Auf dieser Seite wird beschrieben, wie Sie die Objektversionierung einrichten. Anhand von Beispielen wird deren Einsatz gezeigt.

Objektversionierung einrichten

In den folgenden Abschnitten wird gezeigt, wie Sie die Objektversionierung mit dem gsutil-Tool, der JSON API und der XML API aktivieren bzw. deaktivieren. Über die Google Cloud Console kann die Funktion derzeit nicht ausgeführt werden.

Objektversionierung aktivieren

So aktivieren Sie die Objektversionierung für einen Bucket:

gsutil

Führen Sie den Befehl gsutil versioning set on aus:

gsutil versioning set on gs://[BUCKET_NAME]

Dabei ist [BUCKET_NAME] der Name des entsprechenden Buckets. Beispiel: my-bucket.

Codebeispiele

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original) throw std::runtime_error(original.status().message());

  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetVersioning(
          gcs::BucketVersioning{true}),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::runtime_error(patched.status().message());

  if (patched->versioning().has_value()) {
    std::cout << "Object versioning for bucket " << bucket_name << " is "
              << (patched->versioning()->enabled ? "enabled" : "disabled")
              << "\n";
  } else {
    std::cout << "Object versioning for bucket " << bucket_name
              << " is disabled.\n";
  }
}

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class EnableBucketVersioning {
  public static void enableBucketVersioning(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    bucket.toBuilder().setVersioningEnabled(true).build().update();

    System.out.println("Versioning is now enabled for bucket " + bucketName);
  }
}

REST APIs

JSON API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Erstellen Sie eine .json-Datei, die die folgenden Informationen enthält:

    {
      "versioning": {
        "enabled": true
      }
    }
  3. Verwenden Sie cURL, um die JSON API mit einer PATCH-Bucket-Anfrage aufzurufen:

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=versioning"

    Dabei gilt:

    • [JSON_FILE_NAME] ist die Datei, die Sie in Schritt 2 erstellt haben.
    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

XML API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Erstellen Sie eine .xml-Datei, die die folgenden Informationen enthält:

    <VersioningConfiguration>
      <Status>Enabled</Status>
    </VersioningConfiguration>
  3. Verwenden Sie cURL, um die XML API mit einer PUT-Bucket-Anfrage und mit dem Abfragestringparameter versioning aufzurufen:

    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versioning"

    Dabei gilt:

    • [XML_FILE_NAME] ist die Datei, die Sie in Schritt 2 erstellt haben.
    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

Nach der Aktivierung der Objektversionierung erstellt Cloud Storage bei jedem Überschreiben oder Löschen der Live-Version des Objekts eine nicht aktuelle Objektversion.

Objektversionierung deaktivieren

So deaktivieren Sie die Objektversionierung für einen Bucket:

gsutil

Führen Sie den Befehl gsutil versioning set off aus:

gsutil versioning set off gs://[BUCKET_NAME]

Dabei ist [BUCKET_NAME] der Name des entsprechenden Buckets. Beispiel: my-bucket.

Codebeispiele

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original) throw std::runtime_error(original.status().message());

  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetVersioning(
          gcs::BucketVersioning{false}),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::runtime_error(patched.status().message());

  if (patched->versioning().has_value()) {
    std::cout << "Object versioning for bucket " << bucket_name << " is "
              << (patched->versioning()->enabled ? "enabled" : "disabled")
              << "\n";
  } else {
    std::cout << "Object versioning for bucket " << bucket_name
              << " is disabled.\n";
  }
}

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class DisableBucketVersioning {
  public static void disableBucketVersioning(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    bucket.toBuilder().setVersioningEnabled(false).build().update();

    System.out.println("Versioning is now disabled for bucket " + bucketName);
  }
}

REST APIs

JSON API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Erstellen Sie eine .json-Datei, die die folgenden Informationen enthält:

    {
      "versioning": {
        "enabled": false
      }
    }
  3. Verwenden Sie cURL, um die JSON API mit einer PATCH-Bucket-Anfrage aufzurufen:

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=versioning"

    Dabei gilt:

    • [JSON_FILE_NAME] ist die Datei, die Sie in Schritt 2 erstellt haben.
    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

XML API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Erstellen Sie eine .xml-Datei, die die folgenden Informationen enthält:

    <VersioningConfiguration>
      <Status>Suspended</Status>
    </VersioningConfiguration>
  3. Verwenden Sie cURL, um die XML API mit einer PUT-Bucket-Anfrage und mit dem Abfragestringparameter versioning aufzurufen:

    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versioning"

    Dabei gilt:

    • [XML_FILE_NAME] ist die Datei, die Sie in Schritt 2 erstellt haben.
    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

Prüfen, ob die Objektversionierung aktiviert ist

So prüfen Sie, ob die Objektversionierung für einen Bucket aktiviert ist:

gsutil

Führen Sie den Befehl gsutil versioning get aus:

gsutil versioning get gs://[BUCKET_NAME]

Dabei ist [BUCKET_NAME] der Name des entsprechenden Buckets. Beispiel: my-bucket.

Die Antwort sieht in etwa so aus, wenn die Objektversionierung aktiviert ist:

gs://[BUCKET_NAME]: Enabled

REST APIs

JSON API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die JSON API mit einer GET-Bucket-Anfrage aufzurufen:

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=versioning"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

XML API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die XML API mit einer GET-Bucket-Anfrage und mit dem Abfragestringparameter versioning aufzurufen:

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versioning"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

Mit versionierten Objekten arbeiten

In den folgenden Abschnitten wird erklärt, wie Sie mit versionierten Objekten arbeiten. Für ein detailliertes Beispiel zum Arbeiten mit Objektversionierung siehe Objektversionierungsbeispiel.

Nicht aktuelle Objektversionen auflisten

So listen Sie sowohl Live- als auch nicht aktuelle Versionen eines Objekts mit den zugehörigen generation-Nummern auf:

gsutil

Führen Sie den Befehl gsutil ls -a aus:

gsutil ls -a gs://[BUCKET_NAME]

Dabei ist [BUCKET_NAME] der Name des entsprechenden Buckets. Beispiel: my-bucket.

Die Antwort sieht in etwa so aus:

gs://[BUCKET_NAME]/[OBJECT_NAME1]#[GENERATION_NUMBER1]
gs://[BUCKET_NAME]/[OBJECT_NAME1]#[GENERATION_NUMBER2]
gs://[BUCKET_NAME]/[OBJECT_NAME1]#[GENERATION_NUMBER3]
...

Codebeispiele

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name) {
  for (auto&& object_metadata :
       client.ListObjects(bucket_name, gcs::Versions{true})) {
    if (!object_metadata) {
      throw std::runtime_error(object_metadata.status().message());
    }

    std::cout << "bucket_name=" << object_metadata->bucket()
              << ", object_name=" << object_metadata->name()
              << ", generation=" << object_metadata->generation() << "\n";
  }
}

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

import com.google.api.gax.paging.Page;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class ListObjectsWithOldVersions {
  public static void listObjectsWithOldVersions(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";
    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    Page<Blob> blobs = bucket.list(Storage.BlobListOption.versions(true));

    for (Blob blob : blobs.iterateAll()) {
      System.out.println(blob.getName() + "," + blob.getGeneration());
    }
  }
}

REST APIs

JSON API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die JSON API mit einer LIST-Objektanfrage aufzurufen:

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o?versions=true"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

Nicht aktuelle Versionen von Objekten weisen das Attribut timeDeleted auf.

XML API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die XML API mit einer GET-Bucket-Anfrage und mit dem Abfragestringparameter versions aufzurufen:

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versions"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 erstellt haben.
    • [BUCKET_NAME] ist der Name des entsprechenden Buckets. Beispiel: my-bucket.

Eine GET-Anfrage liefert unterschiedliche Ergebnisse, je nachdem, ob der Abfrageparameter versions verwendet wird oder nicht. Cloud Storage gibt die folgenden Informationen zurück, wenn Sie einen versions-Abfrageparameter in Ihre Anfrage einfügen:

  • Ein Version-Element mit Informationen zu dem jeweiligen Objekt.
  • Ein DeletedTime-Element, das die Zeit angibt, ab der das Objekt nicht mehr aktuell war (gelöscht oder überschrieben wurde).
  • Ein `IsLatest-Element, das angibt, ob das Objekt die neueste Version ist.
  • Ein NextGenerationMarker-Element wird zurückgegeben, wenn die Liste der Objekte nur einen Teil umfasst. Dies geschieht, wenn sich in einem Bucket viele Objektversionen befinden. Verwenden Sie den Wert dieses Elements im Abfrageparameter generationmarker nachfolgender Anfragen, um vom letzten Punkt aus fortzufahren. Der Abfrageparameter generationmarker wird genauso verwendet wie der Abfrageparameter marker, um in der Auflistung eines nicht versionierten Buckets zu suchen.

Auf nicht aktuelle Objektversionen zugreifen

So verwenden Sie die nicht aktuelle Version eines Objekts bei der Durchführung von Aufgaben, z. B. dem Herunterladen des Objekts, Anzeigen der Metadaten oder Aktualisieren der Metadaten:

gsutil

  1. Hängen Sie die generation-Nummer der nicht aktuellen Version an den Objektnamen an:

    [OBJECT_NAME]#[GENERATION_NUMBER]

    Dabei gilt:

    • [OBJECT_NAME] ist der Name der nicht aktuellen Version. Beispiel: pets/dog.png.
    • [GENERATION_NUMBER] ist die Generierungsnummer für die nicht aktuelle Version. Beispiel: 1560468815691234.
  2. Fahren Sie fort, wie Sie es bei der Live-Version des Objekts tun würden, und verwenden Sie dabei den String aus Schritt 1.

REST APIs

JSON API

  1. Hängen Sie die generation-Nummer der nicht aktuellen Version an den URI für das Objekt an:

    https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]?generation=[GENERATION_NUMBER]

    Dabei gilt:

    • [BUCKET_NAME] ist der Name des Buckets, der die nicht aktuelle Version enthält. Beispiel: my-bucket.
    • [OBJECT_NAME] ist der Name der nicht aktuellen Version. Beispiel: pets/dog.png
    • [GENERATION_NUMBER] ist die Generierungsnummer für die nicht aktuelle Version. Beispiel: 1560468815691234.
  2. Fahren Sie fort, wie Sie es mit der Live-Version des Objekts tun würden, und verwenden Sie dabei den URI aus Schritt 1.

XML API

  1. Hängen Sie die generation-Nummer der nicht aktuellen Version an den URI für das Objekt an:

    https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]?generation=[GENERATION_NUMBER]

    Dabei gilt:

    • [BUCKET_NAME] ist der Name des Buckets, der die nicht aktuelle Version enthält. Beispiel: my-bucket.
    • [OBJECT_NAME] ist der Name der nicht aktuellen Version. Beispiel: pets/dog.png
    • [GENERATION_NUMBER] ist die Generierungsnummer für die nicht aktuelle Version. Beispiel: 1560468815691234.
  2. Fahren Sie fort, wie Sie es mit der Live-Version des Objekts tun würden, und verwenden Sie dabei den URI aus Schritt 1.

Nicht aktuelle Objektversionen kopieren

So kopieren Sie eine nicht aktuelle Version eines Objekts:

gsutil

Führen Sie den Befehl gsutil cp aus:

gsutil cp gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]#[GENERATION_NUMBER] gs://[DESTINATION_BUCKET_NAME]/[DESTINATION_OBJECT_NAME]

Dabei gilt:

  • [SOURCE_BUCKET_NAME] ist der Name des Buckets mit der nicht aktuellen Version, die Sie kopieren möchten. Beispiel: my-bucket.
  • [SOURCE_OBJECT_NAME] ist der Name der nicht aktuellen Version, die Sie kopieren möchten. Beispiel: pets/dog.png.
  • [GENERATION_NUMBER] ist die Generierungsnummer der nicht aktuellen Version, die Sie kopieren möchten. Zum Beispiel 1560468815691234.
  • [DESTINATION_BUCKET_NAME] ist der Name des Buckets, in den Sie die nicht aktuelle Version kopieren möchten. Beispiel: my-bucket.
  • [DESTINATION_OBJECT_NAME] ist der Name der Kopie der nicht aktuellen Version. Beispiel: pets/shiba.png

Wenn der Vorgang erfolgreich war, sieht die Antwort so aus:

Operation completed over 1 objects/58.8 KiB.

Codebeispiele

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& source_bucket_name,
   std::string const& source_object_name,
   std::string const& destination_bucket_name,
   std::string const& destination_object_name,
   std::int64_t source_object_generation) {
  StatusOr<gcs::ObjectMetadata> copy =
      client.CopyObject(source_bucket_name, source_object_name,
                        destination_bucket_name, destination_object_name,
                        gcs::SourceGeneration{source_object_generation});
  if (!copy) throw std::runtime_error(copy.status().message());

  std::cout << "Successfully copied " << source_object_name << " generation "
            << source_object_generation << " in bucket " << source_bucket_name
            << " to bucket " << copy->bucket() << " with name "
            << copy->name()
            << ".\nThe full metadata after the copy is: " << *copy << "\n";
}

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class CopyOldVersionOfObject {
  public static void copyOldVersionOfObject(
      String projectId,
      String bucketName,
      String objectToCopy,
      long generationToCopy,
      String newObjectName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of the GCS object to copy an old version of
    // String objectToCopy = "your-object-name";

    // The generation of objectToCopy to copy
    // long generationToCopy = 1579287380533984;

    // What to name the new object with the old data from objectToCopy
    // String newObjectName = "your-new-object";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Storage.CopyRequest copyRequest =
        Storage.CopyRequest.newBuilder()
            .setSource(BlobId.of(bucketName, objectToCopy, generationToCopy))
            .setTarget(BlobId.of(bucketName, newObjectName))
            .build();
    storage.copy(copyRequest);

    System.out.println(
        "Generation "
            + generationToCopy
            + " of object "
            + objectToCopy
            + " in bucket "
            + bucketName
            + " was copied to "
            + newObjectName);
  }
}

REST APIs

JSON API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die JSON API mit einer POST-Objektanfrage aufzurufen:

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://storage.googleapis.com/upload/storage/v1/b/[SOURCE_BUCKET_NAME]/o/[SOURCE_OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET_NAME]/o/[NAME_OF_COPY]?sourceGeneration=[GENERATION_NUMBER]"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
    • [SOURCE_BUCKET_NAME] ist der Name des Buckets mit der nicht aktuellen Version, die Sie kopieren möchten. Beispiel: my-bucket.
    • [SOURCE_OBJECT_NAME] ist der Name der nicht aktuellen Version, die Sie kopieren möchten. Beispiel: pets/dog.png.
    • [DESTINATION_BUCKET_NAME] ist der Name des Buckets, in den Sie die nicht aktuelle Version kopieren möchten. Beispiel: my-bucket.
    • [NAME OF COPY] ist der Name der Kopie der nicht aktuellen Version. Beispiel: pets/shiba.png
    • [GENERATION_NUMBER] ist die Generierungsnummer der nicht aktuellen Version, die Sie kopieren möchten. Zum Beispiel 1560468815691234.

XML API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die XML API mit einer PUT-Objektanfrage aufzurufen:

    curl -X PUT \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "x-goog-copy-source: [SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]" \
      -H "x-goog-copy-source-generation:[GENERATION_NUMBER]" \
      "https://storage.googleapis.com/[DESTINATION_BUCKET_NAME]/[NAME_OF_COPY]"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
    • [SOURCE_BUCKET_NAME] ist der Name des Buckets mit der nicht aktuellen Version, die Sie kopieren möchten. Beispiel: my-bucket.
    • [SOURCE_OBJECT_NAME] ist der Name der nicht aktuellen Version, die Sie kopieren möchten. Beispiel: pets/dog.png.
    • [GENERATION_NUMBER] ist die Generierungsnummer der nicht aktuellen Version, die Sie kopieren möchten. Zum Beispiel 1560468815691234.
    • [DESTINATION_BUCKET_NAME] ist der Name des Buckets, in den Sie die nicht aktuelle Version kopieren möchten. Beispiel: my-bucket.
    • [NAME OF COPY] ist der Name der Kopie der nicht aktuellen Version. Beispiel: pets/shiba.png

Nicht aktuelle Objektversionen löschen

So löschen Sie eine nicht aktuelle Version eines Objekts:

gsutil

Führen Sie den Befehl gsutil rm aus:

gsutil rm gs://[BUCKET_NAME]/[OBJECT_NAME]#[GENERATION_NUMBER]

Dabei gilt:

  • [BUCKET_NAME] ist der Name des Buckets mit der nicht aktuellen Version, die Sie löschen möchten. Beispiel: my-bucket.
  • [OBJECT_NAME] ist der Name der nicht aktuellen Version, die Sie löschen möchten. Beispiel: pets/dog.png
  • [GENERATION_NUMBER] ist die Generierungsnummer der nicht aktuellen Version, die Sie löschen möchten. Zum Beispiel 1560468815691234.

Wenn der Vorgang erfolgreich war, sieht die Antwort so aus:

Operation completed over 1 objects.

Codebeispiele

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& object_name, std::int64_t object_generation) {
  google::cloud::Status status = client.DeleteObject(
      bucket_name, object_name, gcs::Generation{object_generation});
  if (!status.ok()) throw std::runtime_error(status.message());

  std::cout << "Deleted " << object_name << " generation "
            << object_generation << " in bucket " << bucket_name << "\n";
}

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class DeleteOldVersionOfObject {
  public static void deleteOldVersionOfObject(
      String projectId, String bucketName, String objectName, long generationToDelete) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    // The generation of objectName to delete
    // long generationToDelete = 1579287380533984;

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    storage.delete(BlobId.of(bucketName, objectName, generationToDelete));

    System.out.println(
        "Generation "
            + generationToDelete
            + " of object "
            + objectName
            + " was deleted from "
            + bucketName);
  }
}

REST APIs

JSON API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die JSON API mit einer DELETE-Objektanfrage aufzurufen:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]?generation=[GENERATION_NUMBER]"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
    • [BUCKET_NAME] ist der Name des Buckets mit der nicht aktuellen Version, die Sie löschen möchten. Beispiel: my-bucket.
    • [OBJECT_NAME] ist der Name der nicht aktuellen Version, die Sie löschen möchten. Beispiel: pets/dog.png
    • [GENERATION_NUMBER] ist die Generierungsnummer der nicht aktuellen Version, die Sie löschen möchten. Zum Beispiel 1560468815691234.

XML API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Verwenden Sie cURL, um die XML API mit einer DELETE-Objektanfrage aufzurufen:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]?generation=[GENERATION_NUMBER]"

    Dabei gilt:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
    • [BUCKET_NAME] ist der Name des Buckets mit der nicht aktuellen Version, die Sie löschen möchten. Beispiel: my-bucket.
    • [OBJECT_NAME] ist der Name der nicht aktuellen Version, die Sie löschen möchten. Beispiel: pets/dog.png
    • [GENERATION_NUMBER] ist die Generierungsnummer der nicht aktuellen Version, die Sie löschen möchten. Zum Beispiel 1560468815691234.

Weitere Informationen