Utilizza oggetti sottoposti al controllo delle versioni

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Vai ai concetti

In questa pagina viene descritto come elencare, accedere, ripristinare ed eliminare gli oggetti non correnti, che in genere si applica ai bucket con la funzionalità Controllo delle versioni degli oggetti abilitato.

Autorizzazioni obbligatorie

Console

Per completare questa guida utilizzando la console Google Cloud, devi disporre delle autorizzazioni IAM appropriate. Se il bucket a cui vuoi accedere esiste in un progetto che non hai creato, potresti aver bisogno che il proprietario del progetto ti assegni un ruolo contenente le autorizzazioni necessarie.

Per un elenco delle autorizzazioni necessarie per azioni specifiche, consulta Autorizzazioni IAM per la console Google Cloud.

Per un elenco dei ruoli pertinenti, consulta Ruoli Cloud Storage. In alternativa, puoi creare un ruolo personalizzato con autorizzazioni specifiche e limitate.

Riga di comando

Per completare questa guida utilizzando un'utilità a riga di comando, devi disporre delle autorizzazioni IAM appropriate. Se il bucket a cui vuoi accedere esiste in un progetto che non hai creato, potresti aver bisogno che il proprietario del progetto ti assegni un ruolo contenente le autorizzazioni necessarie.

Per un elenco delle autorizzazioni necessarie per azioni specifiche, consulta Autorizzazioni IAM per i comandi gsutil.

Per un elenco dei ruoli pertinenti, consulta Ruoli Cloud Storage. In alternativa, puoi creare un ruolo personalizzato con autorizzazioni specifiche e limitate.

Librerie client

Per completare questa guida utilizzando le librerie client di Cloud Storage, devi disporre delle autorizzazioni IAM appropriate. Se il bucket a cui vuoi accedere esiste in un progetto che non hai creato, potresti aver bisogno che il proprietario del progetto ti assegni un ruolo contenente le autorizzazioni necessarie.

Se non diversamente specificato, le richieste della libreria client vengono effettuate tramite l'API JSON e richiedono le autorizzazioni elencate nelle autorizzazioni IAM per i metodi JSON. Per vedere quali metodi dell'API JSON vengono richiamati quando effettui richieste utilizzando una libreria client, registra le richieste non elaborate.

Per un elenco di ruoli IAM pertinenti, consulta i ruoli Cloud Storage. In alternativa, puoi creare un ruolo personalizzato con autorizzazioni specifiche e limitate.

API REST

API JSON

Per completare questa guida utilizzando l'API JSON, devi disporre delle autorizzazioni IAM appropriate. Se il bucket a cui vuoi accedere esiste in un progetto che non hai creato, potresti aver bisogno che il proprietario del progetto ti assegni un ruolo contenente le autorizzazioni necessarie.

Per un elenco delle autorizzazioni necessarie per azioni specifiche, consulta la pagina relativa alle autorizzazioni IAM per i metodi JSON.

Per un elenco dei ruoli pertinenti, consulta Ruoli Cloud Storage. In alternativa, puoi creare un ruolo personalizzato con autorizzazioni specifiche e limitate.

Elenca le versioni degli oggetti non correnti

Per elencare le versioni live e non correnti degli oggetti e visualizzarne i numeri generation:

Console

  1. Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket che contiene l'oggetto desiderato.

    Si apre la pagina dei dettagli del bucket, con la scheda Oggetti selezionata.

  3. Vai all'oggetto, che potrebbe trovarsi in una cartella.

  4. Fai clic sul nome dell'oggetto desiderato.

    Si apre la pagina Dettagli oggetto, con la scheda Oggetto pubblicato selezionata.

  5. Fai clic sulla scheda Cronologia delle versioni.

Riga di comando

gcloud

Utilizza il comando gcloud storage ls --all-versions:

gcloud storage ls --all-versions gs://BUCKET_NAME

Dove BUCKET_NAME è il nome del bucket pertinente. Ad esempio, my-bucket.

La risposta sarà simile all'esempio seguente:

gs://BUCKET_NAME/OBJECT_NAME1#GENERATION_NUMBER1
gs://BUCKET_NAME/OBJECT_NAME2#GENERATION_NUMBER2
gs://BUCKET_NAME/OBJECT_NAME3#GENERATION_NUMBER3
...

gsutil

Utilizza il comando gsutil ls -a:

gsutil ls -a gs://BUCKET_NAME

Dove BUCKET_NAME è il nome del bucket pertinente. Ad esempio, my-bucket.

La risposta sarà simile all'esempio seguente:

gs://BUCKET_NAME/OBJECT_NAME1#GENERATION_NUMBER1
gs://BUCKET_NAME/OBJECT_NAME2#GENERATION_NUMBER2
gs://BUCKET_NAME/OBJECT_NAME3#GENERATION_NUMBER3
...

Librerie client

C++

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage C++.

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::move(object_metadata).status();

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

C#

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage C#.


using Google.Cloud.Storage.V1;
using System;
using System.Collections.Generic;

public class ListFileArchivedGenerationSample
{
	public IEnumerable<Google.Apis.Storage.v1.Data.Object> ListFileArchivedGeneration(string bucketName = "your-bucket-name")
	{
		var storage = StorageClient.Create();

		var storageObjects = storage.ListObjects(bucketName, options: new ListObjectsOptions
		{
			Versions = true
		});

		foreach (var storageObject in storageObjects)
		{
			Console.WriteLine($"Filename: {storageObject.Name}, Generation: {storageObject.Generation}");
		}

		return storageObjects;
	}
}

Go

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Go.

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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Java.

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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Node.js.

/**
 * 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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage PHP.

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.
 *        (e.g. 'my-bucket')
 */
function list_file_archived_generations(string $bucketName): void
{
    $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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Python.

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(f"{blob.name},{blob.generation}")

Ruby

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Ruby.

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

API REST

API JSON

  1. Richiedi un token di accesso all'autorizzazione da Playground OAuth 2.0. Configura il parco giochi in modo che utilizzi le tue credenziali OAuth. Per le istruzioni, consulta Autenticazione API.
  2. Utilizza cURL per chiamare API JSON con una richiesta LIST Object:

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

    Dove:

    • OAUTH2_TOKEN è il token di accesso che hai creato nel passaggio 1.
    • BUCKET_NAME è il nome del bucket pertinente. Ad esempio, my-bucket.

Le versioni non aggiornate degli oggetti hanno una proprietà timeDeleted.

API XML

  1. Richiedi un token di accesso all'autorizzazione da Playground OAuth 2.0. Configura il parco giochi in modo che utilizzi le tue credenziali OAuth. Per le istruzioni, consulta Autenticazione API.
  2. Utilizza cURL per chiamare l'API XML, con una richiesta di GET Bucket e un parametro di stringa di query versions:

    curl -X GET \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      "https://storage.googleapis.com/BUCKET_NAME?versions&list-type=2"

    Dove:

    • OAUTH2_TOKEN è il token di accesso che hai creato nel passaggio 1.
    • BUCKET_NAME è il nome del bucket pertinente. Ad esempio, my-bucket.

Ci sono alcune differenze nei risultati della richiesta GET quando utilizzi il parametro di ricerca versions rispetto a quando non lo utilizzi. In particolare, Cloud Storage restituisce le seguenti informazioni quando includi un parametro di ricerca versions nella richiesta:

  • Un elemento Version che contiene informazioni su ciascun oggetto.
  • Un elemento DeletedTime contenente l'ora in cui la versione dell'oggetto è diventata non corrente (eliminata o sostituita).
  • Un elemento "IsLatest" che indica se l'oggetto specifico è la versione più recente.
  • Un elemento NextGenerationMarker viene restituito se l'elenco degli oggetti è parziale, cosa che si verifica quando in un bucket sono presenti molte versioni dell'oggetto. Utilizza il valore di questo elemento nel parametro di ricerca generationmarker delle richieste successive per riprendere dal tuo ultimo punto. Il parametro di ricerca generationmarker viene utilizzato nello stesso modo in cui utilizzi il parametro di ricerca marker per sfogliare una scheda per un bucket non in versione.

Accedi alle versioni degli oggetti non correnti

Per utilizzare la versione non corrente di un oggetto quando si eseguono attività come scaricare l'oggetto, visualizzarne i metadati o aggiornarne i metadati:

Console

L'accesso generale a una versione non attuale non è disponibile nella console Google Cloud. Con la console Google Cloud puoi spostare, copiare, ripristinare o eliminare solo una versione non corrente. Queste azioni vengono eseguite dall'elenco della cronologia delle versioni per un oggetto.

Riga di comando

gcloud

  1. Aggiungi il numero generation della versione non attuale al nome dell'oggetto:

    OBJECT_NAME#GENERATION_NUMBER

    Dove:

    • OBJECT_NAME è il nome della versione non corrente. Ad esempio, pets/dog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non attuale. Ad esempio, 1560468815691234.
  2. Utilizzando la stringa del passaggio 1, procedi come faresti normalmente per la versione live dell'oggetto.

gsutil

  1. Aggiungi il numero generation della versione non attuale al nome dell'oggetto:

    OBJECT_NAME#GENERATION_NUMBER

    Dove:

    • OBJECT_NAME è il nome della versione non corrente. Ad esempio, pets/dog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non attuale. Ad esempio, 1560468815691234.
  2. Utilizzando la stringa del passaggio 1, procedi come faresti normalmente per la versione live dell'oggetto.

API REST

API JSON

  1. Aggiungi il numero generation della versione non attuale all'URI dell'oggetto:

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

    Dove:

    • BUCKET_NAME è il nome del bucket contenente la versione non corrente. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome della versione non attuale della codifica URL. Ad esempio, pets/dog.png, con codifica URL come pets%2Fdog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non attuale. Ad esempio, 1560468815691234.
  2. Utilizzando l'URI del passaggio 1, procedi come faresti normalmente per la versione live dell'oggetto.

API XML

  1. Aggiungi il numero generation della versione non attuale all'URI dell'oggetto:

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

    Dove:

    • BUCKET_NAME è il nome del bucket contenente la versione non corrente. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome della versione non attuale della codifica URL. Ad esempio, pets/dog.png, con codifica URL come pets%2Fdog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non corrente. Ad esempio, 1560468815691234.
  2. Utilizzando l'URI del passaggio 1, procedi come faresti normalmente per la versione live dell'oggetto.

Ripristina versioni non aggiornate dell'oggetto

In Cloud Storage, il ripristino di una versione di un oggetto non attuale significa crearne una copia. In questo caso, la copia diventa la versione live, ripristinando di fatto la versione. Se è già presente una versione live e il bucket ha il controllo delle versioni degli oggetti abilitato, il ripristino della versione non corrente comporta la non versione attuale.

Console

  1. Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket che contiene l'oggetto desiderato.

    Si apre la pagina dei dettagli del bucket, con la scheda Oggetti selezionata.

    Per visualizzare gli oggetti eliminati, fai clic sul pulsante di attivazione/disattivazione "Mostra dati eliminati".

  3. Vai all'oggetto, che potrebbe trovarsi in una cartella.

  4. Fai clic sul nome dell'oggetto desiderato.

    Si apre la pagina Dettagli oggetto, con la scheda Oggetto pubblicato selezionata.

  5. Fai clic sulla scheda Cronologia delle versioni.

  6. Fai clic sul pulsante Ripristina relativo alla versione che ti interessa.

    Viene aperto il riquadro della versione dell'oggetto di ripristino.

  7. Fai clic su Conferma.

Riga di comando

gcloud

Utilizza il comando gcloud storage cp:

gcloud storage cp gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER gs://BUCKET_NAME/OBJECT_NAME

Dove:

  • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi ripristinare. Ad esempio: my-bucket.
  • OBJECT_NAME è il nome della versione non corrente da ripristinare. Ad esempio, pets/dog.png.
  • GENERATION_NUMBER è il numero di generazione della versione non corrente che vuoi ripristinare. Ad esempio: 1560468815691234.

In caso di esito positivo, la risposta avrà il seguente esempio:

Operation completed over 1 objects/58.8 KiB.

gsutil

Utilizza il comando gsutil cp:

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

Dove:

  • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi ripristinare. Ad esempio: my-bucket.
  • OBJECT_NAME è il nome della versione non corrente da ripristinare. Ad esempio, pets/dog.png.
  • GENERATION_NUMBER è il numero di generazione della versione non corrente che vuoi ripristinare. Ad esempio: 1560468815691234.

In caso di esito positivo, la risposta avrà il seguente esempio:

Operation completed over 1 objects/58.8 KiB.

Librerie client

C++

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage C++.

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::move(copy).status();

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

C#

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage C#.


using Google.Cloud.Storage.V1;
using System;

public class CopyFileArchivedGenerationSample
{
    public Google.Apis.Storage.v1.Data.Object CopyFileArchivedGeneration(
        string sourceBucketName = "source-bucket-name",
        string sourceObjectName = "source-file",
        string destBucketName = "destination-bucket-name",
        string destObjectName = "destination-file-name",
        long? generation = 1579287380533984)
    {
        var storage = StorageClient.Create();
        var copyOptions = new CopyObjectOptions
        {
            SourceGeneration = generation
        };

        var copiedFile = storage.CopyObject(sourceBucketName, sourceObjectName,
            destBucketName, destObjectName, copyOptions);

        Console.WriteLine($"Generation {generation} of the object {sourceBucketName}/{sourceObjectName} " +
            $"was copied to to {destBucketName}/{destObjectName}.");

        return copiedFile;
    }
}

Go

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Go.

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)

	// Optional: set a generation-match precondition to avoid potential race
	// conditions and data corruptions. The request to copy is aborted if the
	// object's generation number does not match your precondition.
	// For a dst object that does not yet exist, set the DoesNotExist precondition.
	dst = dst.If(storage.Conditions{DoesNotExist: true})
	// If the destination object already exists in your bucket, set instead a
	// generation-match precondition using its generation number.
	// attrs, err := dst.Attrs(ctx)
	// if err != nil {
	// 	return fmt.Errorf("object.Attrs: %v", err)
	// }
	// dst = dst.If(storage.Conditions{GenerationMatch: attrs.Generation})

	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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Java.

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

    // Optional: set a generation-match precondition to avoid potential race
    // conditions and data corruptions. The request returns a 412 error if the
    // preconditions are not met.
    Storage.BlobTargetOption precondition;
    if (storage.get(bucketName, newObjectName) == null) {
      // For a target object that does not yet exist, set the DoesNotExist precondition.
      // This will cause the request to fail if the object is created before the request runs.
      precondition = Storage.BlobTargetOption.doesNotExist();
    } else {
      // If the destination already exists in your bucket, instead set a generation-match
      // precondition. This will cause the request to fail if the existing object's generation
      // changes before the request runs.
      precondition =
          Storage.BlobTargetOption.generationMatch(
              storage.get(bucketName, newObjectName).getGeneration());
    }

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

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

Node.js

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Node.js.

/**
 * 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

  // Optional:
  // Set a generation-match precondition to avoid potential race conditions
  // and data corruptions. The request to copy is aborted if the object's
  // generation number does not match your precondition. For a destination
  // object that does not yet exist, set the ifGenerationMatch precondition to 0
  // If the destination object already exists in your bucket, set instead a
  // generation-match precondition using its generation number.
  const copyOptions = {
    preconditionOpts: {
      ifGenerationMatch: destinationGenerationMatchPrecondition,
    },
  };

  await storage
    .bucket(srcBucketName)
    .file(srcFilename, {
      generation,
    })
    .copy(storage.bucket(destBucketName).file(destFileName), copyOptions);

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

copyOldVersionOfFile().catch(console.error);

PHP

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage PHP.

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.
 *        (e.g. 'my-bucket')
 * @param string $objectToCopy The name of the object to copy.
 *        (e.g. 'my-object')
 * @param string $generationToCopy The generation of the object to copy.
 *        (e.g. 1579287380533984)
 * @param string $newObjectName The name of the target object.
 *        (e.g. 'my-object-1579287380533984')
 */
function copy_file_archived_generation(string $bucketName, string $objectToCopy, string $generationToCopy, string $newObjectName): void
{
    $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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Python.

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)

    # Optional: set a generation-match precondition to avoid potential race conditions
    # and data corruptions. The request to copy is aborted if the object's
    # generation number does not match your precondition. For a destination
    # object that does not yet exist, set the if_generation_match precondition to 0.
    # If the destination object already exists in your bucket, set instead a
    # generation-match precondition using its generation number.
    destination_generation_match_precondition = 0

    # source_generation selects a specific revision of the source object, as opposed to the latest version.
    blob_copy = source_bucket.copy_blob(
        source_blob, destination_bucket, destination_blob_name, source_generation=generation, if_generation_match=destination_generation_match_precondition
    )

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

Ruby

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Ruby.

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, skip_lookup: true
  source_file = source_bucket.file source_file_name
  destination_bucket = storage.bucket destination_bucket_name, skip_lookup: true

  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

API REST

API JSON

  1. Richiedi un token di accesso all'autorizzazione da Playground OAuth 2.0. Configura il parco giochi in modo che utilizzi le tue credenziali OAuth. Per le istruzioni, consulta Autenticazione API.
  2. Utilizza cURL per chiamare API JSON con una richiesta POST Object:

    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"

    Dove:

    • OAUTH2_TOKEN è il token di accesso che hai generato nel passaggio 1.
    • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi ripristinare. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome con codifica URL della versione non corrente che vuoi ripristinare. Ad esempio, pets/dog.png, con codifica URL come pets%2Fdog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non attuale da ripristinare. Ad esempio: 1560468815691234.

API XML

  1. Richiedi un token di accesso all'autorizzazione da Playground OAuth 2.0. Configura il parco giochi in modo che utilizzi le tue credenziali OAuth. Per le istruzioni, consulta Autenticazione API.
  2. Utilizza cURL per chiamare l'API XML, con una richiesta dell'oggetto PUT:

    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"

    Dove:

    • OAUTH2_TOKEN è il token di accesso che hai generato nel passaggio 1.
    • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi ripristinare. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome con codifica URL della versione non corrente che vuoi ripristinare. Ad esempio, pets/dog.png, con codifica URL come pets%2Fdog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non attuale da ripristinare. Ad esempio: 1560468815691234.

Dopo il ripristino della versione dell'oggetto, la versione originale non corrente continua a esistere nel bucket. Se non hai più bisogno della versione non corrente, puoi eliminarla successivamente o configurare la Gestione oggetti ciclo di vita per rimuoverla quando soddisfa le condizioni specificate.

Elimina le versioni degli oggetti non correnti

Console

  1. Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket che contiene l'oggetto desiderato.

    Si apre la pagina dei dettagli del bucket, con la scheda Oggetti selezionata.

  3. Vai all'oggetto, che potrebbe trovarsi in una cartella.

  4. Fai clic sul nome dell'oggetto desiderato.

    Si apre la pagina Dettagli oggetto, con la scheda Oggetto pubblicato selezionata.

  5. Fai clic sulla scheda Cronologia delle versioni.

  6. Seleziona la casella di controllo relativa alla versione desiderata.

  7. Fai clic sul pulsante Elimina.

    Viene visualizzato il riquadro Elimina versione.

  8. Conferma di voler eliminare l'oggetto digitando delete nella casella di testo.

  9. Fai clic su Elimina.

Riga di comando

gcloud

Utilizza il comando gcloud storage rm:

gcloud storage rm gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER

Dove:

  • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi eliminare. Ad esempio: my-bucket.
  • OBJECT_NAME è il nome della versione non attuale da eliminare. Ad esempio, pets/dog.png.
  • GENERATION_NUMBER è il numero di generazione della versione non corrente che vuoi eliminare. Ad esempio: 1560468815691234.

In caso di esito positivo, la risposta avrà il seguente esempio:

Operation completed over 1 objects.

gsutil

Utilizza il comando gsutil rm:

gsutil rm gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER

Dove:

  • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi eliminare. Ad esempio: my-bucket.
  • OBJECT_NAME è il nome della versione non attuale da eliminare. Ad esempio, pets/dog.png.
  • GENERATION_NUMBER è il numero di generazione della versione non corrente che vuoi eliminare. Ad esempio: 1560468815691234.

In caso di esito positivo, la risposta avrà il seguente esempio:

Operation completed over 1 objects.

Librerie client

C++

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage C++.

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

C#

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage C#.


using Google.Cloud.Storage.V1;
using System;

public class DeleteFileArchivedGenerationSample
{
    public void DeleteFileArchivedGeneration(
        string bucketName = "your-bucket-name",
        string objectName = "your-object-name",
        long? generation = 1579287380533984)
    {
        var storage = StorageClient.Create();

        storage.DeleteObject(bucketName, objectName, new DeleteObjectOptions
        {
            Generation = generation
        });

        Console.WriteLine($"Generation ${generation} of file {objectName} was deleted from bucket {bucketName}.");
    }
}

Go

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Go.

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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Java.

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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Node.js.

/**
 * 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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an archived generation of the given object.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 *        (e.g. 'my-bucket')
 * @param string $objectName The name of your Cloud Storage object.
 *        (e.g. 'my-object')
 * @param string $generationToDelete the generation of the object to delete.
 *        (e.g. 1579287380533984)
 */
function delete_file_archived_generation(string $bucketName, string $objectName, string $generationToDelete): void
{
    $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

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Python.

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(
        f"Generation {generation} of blob {blob_name} was deleted from {bucket_name}"
    )

Ruby

Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Cloud Storage Ruby.

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, skip_lookup: true

  file = bucket.file file_name

  file.delete generation: generation

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

API REST

API JSON

  1. Richiedi un token di accesso all'autorizzazione da Playground OAuth 2.0. Configura il parco giochi in modo che utilizzi le tue credenziali OAuth. Per le istruzioni, consulta Autenticazione API.
  2. Utilizza cURL per chiamare API JSON con una richiesta DELETE Object:

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

    Dove:

    • OAUTH2_TOKEN è il token di accesso che hai generato nel passaggio 1.
    • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi eliminare. Ad esempio: my-bucket.
    • OBJECT_NAME è il nome con codifica URL della versione non corrente che vuoi eliminare. Ad esempio, pets/dog.png, con codifica URL come pets%2Fdog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non corrente che vuoi eliminare. Ad esempio: 1560468815691234.

API XML

  1. Richiedi un token di accesso all'autorizzazione da Playground OAuth 2.0. Configura il parco giochi in modo che utilizzi le tue credenziali OAuth. Per le istruzioni, consulta Autenticazione API.
  2. Utilizza cURL per chiamare l'API XML, con una richiesta dell'oggetto DELETE:

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

    Dove:

    • OAUTH2_TOKEN è il token di accesso che hai generato nel passaggio 1.
    • BUCKET_NAME è il nome del bucket contenente la versione non corrente che vuoi eliminare. Ad esempio: my-bucket.
    • OBJECT_NAME è il nome con codifica URL della versione non corrente che vuoi eliminare. Ad esempio, pets/dog.png, con codifica URL come pets%2Fdog.png.
    • GENERATION_NUMBER è il numero di generazione della versione non corrente che vuoi eliminare. Ad esempio: 1560468815691234.

Passaggi successivi