Mit versionierten Objekten arbeiten

Zu den Konzepten

Auf dieser Seite wird beschrieben, wie nicht aktuelle Objekte aufgelistet, aufgerufen, wiederhergestellt und gelöscht werden. Dies gilt in der Regel für Buckets mit aktivierter Objektversionsverwaltung.

Nicht aktuelle Objektversionen auflisten

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

Console

  1. Wechseln Sie in der Cloud Console zum Cloud Storage-Browser.

    Browser aufrufen

  2. Klicken Sie in der Liste der Buckets auf den Namen des Buckets, der das gewünschte Objekt enthält.

    Die Seite "Bucket-Details" wird geöffnet und der Tab Objekte ist ausgewählt.

  3. Wechseln Sie zu dem Objekt. Dieses befindet sich möglicherweise in einem Ordner.

  4. Klicken Sie auf den Namen des gewünschten Objekts.

    Die Seite „Objektdetails“ wird geöffnet, wobei der Tab Liveobjekt ausgewählt ist.

  5. Klicken Sie auf den Tab Versionsverlauf.

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_NAME2#GENERATION_NUMBER2
gs://BUCKET_NAME/OBJECT_NAME3#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";
  }
}

Go

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

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
	"google.golang.org/api/iterator"
)

// listFilesAllVersion lists both live and noncurrent versions of objects within specified bucket.
func listFilesAllVersion(w io.Writer, bucket string) error {
	// bucket := "bucket-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %v", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	it := client.Bucket(bucket).Objects(ctx, &storage.Query{
		// Versions true to output all generations of objects
		Versions: true,
	})
	for {
		attrs, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Bucket(%q).Objects(): %v", bucket, err)
		}
		fmt.Fprintln(w, attrs.Name, attrs.Generation, attrs.Metageneration)
	}
	return nil
}

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());
    }
  }
}

Node.js

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function listFilesWithOldVersions() {
  const [files] = await storage.bucket(bucketName).getFiles({
    versions: true,
  });

  console.log('Files:');
  files.forEach(file => {
    console.log(file.name, file.generation);
  });
}

listFilesWithOldVersions().catch(console.error);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * List objects in a specified bucket with all archived generations.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 */
function list_file_archived_generations($bucketName)
{
    // $bucketName = 'my-bucket';

    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    $objects = $bucket->objects([
        'versions' => true,
    ]);

    foreach ($objects as $object) {
        print($object->name() . ',' . $object->info()['generation'] . PHP_EOL);
    }
}

Python

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

from google.cloud import storage

def list_file_archived_generations(bucket_name):
    """Lists all the blobs in the bucket with generation."""
    # bucket_name = "your-bucket-name"

    storage_client = storage.Client()

    blobs = storage_client.list_blobs(bucket_name, versions=True)

    for blob in blobs:
        print("{},{}".format(blob.name, blob.generation))

Ruby

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

def list_file_archived_generations bucket_name:
  # The ID of your GCS bucket
  # bucket_name = "your-unique-bucket-name"

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.new
  bucket = storage.bucket bucket_name

  bucket.files.each do |file|
    puts "#{file.name},#{file.generation}"
  end
end

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"

    Hierbei 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&list-type=2"

    Hierbei 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 umgeschrieben 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:

Console

Der allgemeine Zugriff auf eine nicht aktuelle Version ist in der Cloud Console nicht verfügbar. In der Cloud Console können Sie nur nicht aktuelle Versionen verschieben, kopieren, wiederherstellen oder löschen. Diese Aktionen werden in der Liste des Versionsverlaufs für ein Objekt ausgeführt.

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 wiederherstellen

Wenn Sie eine nicht aktuelle Objektversion in Cloud Storage wiederherstellen, wird sie kopiert. Die Kopie wird dann zur Live-Version, wodurch die Version effektiv wiederhergestellt wird. Wenn bereits eine Live-Version vorhanden ist und für den Bucket die Objektversionsverwaltung aktiviert ist, ist durch das Wiederherstellen der nicht aktuellen Version die vorhandene Live-Version nicht mehr aktuell.

Console

  1. Wechseln Sie in der Cloud Console zum Cloud Storage-Browser.

    Browser aufrufen

  2. Klicken Sie in der Liste der Buckets auf den Namen des Buckets, der das gewünschte Objekt enthält.

    Die Seite "Bucket-Details" wird geöffnet und der Tab Objekte ist ausgewählt.

    Klicken Sie auf die Schaltfläche "Gelöschte Daten einblenden", um gelöschte Objekte anzuzeigen.

  3. Wechseln Sie zu dem Objekt. Dieses befindet sich möglicherweise in einem Ordner.

  4. Klicken Sie auf den Namen des gewünschten Objekts.

    Die Seite „Objektdetails“ wird geöffnet, wobei der Tab Liveobjekt ausgewählt ist.

  5. Klicken Sie auf den Tab Versionsverlauf.

  6. Klicken Sie für die gewünschte Version auf die Schaltfläche Wiederherstellen.

    Der Bereich der Version des Wiederherstellungsobjekts wird geöffnet.

  7. Klicken Sie auf Bestätigen.

gsutil

Führen Sie den Befehl gsutil cp aus:

gsutil cp gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER gs://BUCKET_NAME/OBJECT_NAME

Dabei gilt:

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

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";
}

Go

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

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
)

// copyOldVersionOfObject copies a noncurrent version of an object.
func copyOldVersionOfObject(w io.Writer, bucket, srcObject, dstObject string, gen int64) error {
	// bucket := "bucket-name"
	// srcObject := "source-object-name"
	// dstObject := "destination-object-name"

	// gen is the generation of srcObject to copy.
	// gen := 1587012235914578
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %v", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	src := client.Bucket(bucket).Object(srcObject)
	dst := client.Bucket(bucket).Object(dstObject)

	if _, err := dst.CopierFrom(src.Generation(gen)).Run(ctx); err != nil {
		return fmt.Errorf("Object(%q).CopierFrom(%q).Generation(%v).Run: %v", dstObject, srcObject, gen, err)
	}
	fmt.Fprintf(w, "Generation %v of object %v in bucket %v was copied to %v\n", gen, srcObject, bucket, dstObject)
	return nil
}

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

Node.js

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const srcBucketName = "your-unique-bucket-name";

// The ID of the GCS file to copy an old version of
// const srcFilename = "your-file-name";

// The generation of fileToCopy to copy
// const generation = 1579287380533984;

// The ID of the bucket to copy the file to
// const destBucketName = 'target-file-bucket';

// What to name the new file with the old data from srcFilename
// const destFileName = "your-new-file";

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function copyOldVersionOfFile() {
  // Copies the file to the other bucket
  await storage
    .bucket(srcBucketName)
    .file(srcFilename, {
      generation,
    })
    .copy(storage.bucket(destBucketName).file(destFileName));

  console.log(
    `Generation ${generation} of file ${srcFilename} in bucket ${srcBucketName} was copied to ${destFileName} in bucket ${destBucketName}`
  );
}

copyOldVersionOfFile().catch(console.error);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Copy archived generation of a given object to a new object.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 * @param string $objectToCopy The name of the object to copy.
 * @param string $generationToCopy The generation of the object to copy.
 * @param string $newObjectName The name of the target object.
 */
function copy_file_archived_generation($bucketName, $objectToCopy, $generationToCopy, $newObjectName)
{
    // $bucketName = 'my-bucket';
    // $objectToCopy = 'my-object';
    // $generationToCopy = 1579287380533984;
    // $newObjectName = 'my-object-1579287380533984';

    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    $object = $bucket->object($objectToCopy, [
        'generation' => $generationToCopy,
    ]);

    $object->copy($bucket, [
        'name' => $newObjectName,
    ]);

    printf(
        'Generation %s of object %s in bucket %s was copied to %s',
        $generationToCopy,
        $objectToCopy,
        $bucketName,
        $newObjectName
    );
}

Python

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

from google.cloud import storage

def copy_file_archived_generation(
        bucket_name, blob_name, destination_bucket_name, destination_blob_name, generation
):
    """Copies a blob from one bucket to another with a new name with the same generation."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # destination_bucket_name = "destination-bucket-name"
    # destination_blob_name = "destination-object-name"
    # generation = 1579287380533984

    storage_client = storage.Client()

    source_bucket = storage_client.bucket(bucket_name)
    source_blob = source_bucket.blob(blob_name)
    destination_bucket = storage_client.bucket(destination_bucket_name)

    blob_copy = source_bucket.copy_blob(
        source_blob, destination_bucket, destination_blob_name, source_generation=generation
    )

    print(
        "Generation {} of the blob {} in bucket {} copied to blob {} in bucket {}.".format(
            source_blob.generation,
            source_blob.name,
            source_bucket.name,
            blob_copy.name,
            destination_bucket.name,
        )
    )

Ruby

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

def copy_file_archived_generation source_bucket_name:,
                                  source_file_name:,
                                  generation:,
                                  destination_bucket_name:,
                                  destination_file_name:
  # The ID of the bucket the original object is in
  # source_bucket_name = "source-bucket-name"

  # The ID of the GCS object to copy
  # source_file_name = "source-file-name"

  # The generation of your GCS object to copy
  # generation = 1579287380533984

  # The ID of the bucket to copy the object to
  # destination_bucket_name = "destination-bucket-name"

  # The ID of the new GCS object
  # destination_file_name = "destination-file-name"

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.new

  source_bucket = storage.bucket source_bucket_name
  source_file = source_bucket.file source_file_name
  destination_bucket = storage.bucket destination_bucket_name

  destination_file = source_file.copy destination_bucket, destination_file_name, generation: generation

  puts "Generation #{generation} of the file #{source_file.name} in bucket #{source_bucket.name} copied to file " \
       "#{destination_file.name} in bucket #{destination_bucket.name}"
end

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/BUCKET_NAME/o/OBJECT_NAME/rewriteTo/b/BUCKET_NAME/o/OBJECT_NAME?sourceGeneration=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 wiederherstellen möchten. Beispiel: my-bucket
    • OBJECT_NAME ist der Name der nicht aktuellen Version, die Sie wiederherstellen möchten. Beispiel: pets/dog.png
    • GENERATION_NUMBER ist die Generierungsnummer der nicht aktuellen Version, die Sie löschen möchten. 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: BUCKET_NAME/OBJECT_NAME" \
      -H "x-goog-copy-source-generation:GENERATION_NUMBER" \
      "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"

    Hierbei 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 wiederherstellen möchten. Beispiel: my-bucket
    • OBJECT_NAME ist der Name der nicht aktuellen Version, die Sie wiederherstellen möchten. Beispiel: pets/dog.png
    • GENERATION_NUMBER ist die Generierungsnummer der nicht aktuellen Version, die Sie löschen möchten. Beispiel: 1560468815691234

Nach dem Wiederherstellen der Objektversion ist die ursprüngliche nicht aktuelle Version weiterhin im Bucket vorhanden. Wenn Sie die nicht aktuelle Version nicht mehr benötigen, können Sie sie löschen oder Object Lifecycyle Management so konfigurieren, dass sie entfernt wird, wenn sie die von Ihnen angegebenen Bedingungen erfüllt.

Nicht aktuelle Objektversionen löschen

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

Console

  1. Wechseln Sie in der Cloud Console zum Cloud Storage-Browser.

    Browser aufrufen

  2. Klicken Sie in der Liste der Buckets auf den Namen des Buckets, der das gewünschte Objekt enthält.

    Die Seite "Bucket-Details" wird geöffnet und der Tab Objekte ist ausgewählt.

  3. Wechseln Sie zu dem Objekt. Dieses befindet sich möglicherweise in einem Ordner.

  4. Klicken Sie auf den Namen des gewünschten Objekts.

    Die Seite „Objektdetails“ wird geöffnet, wobei der Tab Liveobjekt ausgewählt ist.

  5. Klicken Sie auf den Tab Versionsverlauf.

  6. Klicken Sie das Kästchen für die gewünschte Version an.

  7. Klicken Sie auf Löschen.

    Der Bereich zum Löschen der Version wird geöffnet.

  8. Bestätigen Sie, dass Sie das Objekt löschen möchten. Geben Sie dazu delete in das Textfeld ein.

  9. Klicken Sie auf Löschen.

gsutil

Führen Sie den Befehl gsutil rm aus:

gsutil rm gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER

Hierbei 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. 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";
}

Go

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

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
)

// deleteOldVersionOfObject deletes a noncurrent version of an object.
func deleteOldVersionOfObject(w io.Writer, bucketName, objectName string, gen int64) error {
	// bucketName := "bucket-name"
	// objectName := "object-name"

	// gen is the generation of objectName to delete.
	// gen := 1587012235914578
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %v", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	obj := client.Bucket(bucketName).Object(objectName)
	if err := obj.Generation(gen).Delete(ctx); err != nil {
		return fmt.Errorf("Bucket(%q).Object(%q).Generation(%v).Delete: %v", bucketName, objectName, gen, err)
	}
	fmt.Fprintf(w, "Generation %v of object %v was deleted from %v\n", gen, objectName, bucketName)
	return nil
}

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

Node.js

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The ID of your GCS file
// const fileName = 'your-file-name';

// The generation of fileName to delete
// const generation = 1579287380533984;

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function deleteOldVersionOfFile() {
  // Deletes the file from the bucket with given version
  await storage
    .bucket(bucketName)
    .file(fileName, {
      generation,
    })
    .delete();

  console.log(
    `Generation ${generation} of file ${fileName} was deleted from ${bucketName}`
  );
}

deleteOldVersionOfFile().catch(console.error);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an archived generation of the given object.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 * @param string $objectName The name of your Cloud Storage object.
 * @param string $generationToDelete the generation of the object to delete.
 */
function delete_file_archived_generation($bucketName, $objectName, $generationToDelete)
{
    // $bucketName = 'my-bucket';
    // $objectName = 'my-object';
    // $generationToDelete = 1579287380533984;

    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    $object = $bucket->object($objectName, [
        'generation' => $generationToDelete,
    ]);

    $object->delete();

    printf(
        'Generation %s of object %s was deleted from %s',
        $generationToDelete,
        $objectName,
        $bucketName
    );
}

Python

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

from google.cloud import storage

def delete_file_archived_generation(bucket_name, blob_name, generation):
    """Delete a blob in the bucket with the given generation."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # generation = 1579287380533984

    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    bucket.delete_blob(blob_name, generation=generation)
    print(
        "Generation {} of blob {} was deleted from {}".format(
            generation, blob_name, bucket_name
        )
    )

Ruby

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

def delete_file_archived_generation bucket_name:, file_name:, generation:
  # The ID of your GCS bucket
  # bucket_name = "your-unique-bucket-name"

  # The ID of your GCS object
  # file_name = "your-file-name"

  # The generation of the file to delete
  # generation = 1579287380533984

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.new
  bucket = storage.bucket bucket_name

  file = bucket.file file_name

  file.delete generation: generation

  puts "Generation #{generation} of file #{file_name} was deleted from #{bucket_name}"
end

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. 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"

    Hierbei 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. Beispiel: 1560468815691234

Nächste Schritte