Utiliser la gestion des versions des objets

Accéder aux concepts

Cette page explique comment configurer la gestion des versions d'objets et propose des exemples d'utilisation.

Configurer la gestion des versions d'objets

Les sections suivantes expliquent comment activer et désactiver la gestion des versions d'objets à l'aide de l'outil gsutil, de l'API JSON et de l'API XML. Cette fonctionnalité ne peut actuellement pas être contrôlée à partir de Google Cloud Console.

Activer la gestion des versions d'objets

Pour activer la gestion des versions d'objets sur un bucket, procédez comme suit :

gsutil

Exécutez la commande gsutil versioning set on :

gsutil versioning set on gs://BUCKET_NAME

BUCKET_NAME est le nom du bucket concerné. Par exemple, my-bucket.

Exemples de code

C++

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage C++.

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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Java.

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

Python

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Python.

from google.cloud import storage

def enable_versioning(bucket_name):
    """Enable versioning for this bucket."""
    # bucket_name = "my-bucket"

    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    bucket.versioning_enabled = True
    bucket.patch()

    print("Versioning was enabled for bucket {}".format(bucket.name))
    return bucket

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Créez un fichier .json contenant les informations suivantes :

    {
      "versioning": {
        "enabled": true
      }
    }
  3. Exécutez cURL pour appeler l'API JSON avec une requête de bucket PATCH :

    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"

    Où :

    • JSON_FILE_NAME correspond au fichier que vous avez créé à l'étape 2.
    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

API XML

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Créez un fichier .xml contenant les informations suivantes :

    <VersioningConfiguration>
      <Status>Enabled</Status>
    </VersioningConfiguration>
  3. Utilisez cURL pour appeler l'API XML avec une requête de bucket PUT et un paramètre de chaîne de requête versioning.

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

    Où :

    • XML_FILE_NAME correspond au fichier que vous avez créé à l'étape 2.
    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

Une fois la gestion des versions d'objets activée, chaque fois qu'une version active est remplacée ou supprimée, elle devient une version obsolète.

Désactiver la gestion des versions d'objets

Pour désactiver la gestion des versions d'objets sur un bucket, procédez comme suit :

gsutil

Exécutez la commande gsutil versioning set off :

gsutil versioning set off gs://BUCKET_NAME

BUCKET_NAME est le nom du bucket concerné. Par exemple, my-bucket.

Exemples de code

C++

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage C++.

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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Java.

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

Python

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Python.

from google.cloud import storage

def disable_versioning(bucket_name):
    """Disable versioning for this bucket."""
    # bucket_name = "my-bucket"

    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    bucket.versioning_enabled = False
    bucket.patch()

    print("Versioning was disabled for bucket {}".format(bucket))
    return bucket

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Créez un fichier .json contenant les informations suivantes :

    {
      "versioning": {
        "enabled": false
      }
    }
  3. Exécutez cURL pour appeler l'API JSON avec une requête de bucket PATCH :

    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"

    Où :

    • JSON_FILE_NAME correspond au fichier que vous avez créé à l'étape 2.
    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

API XML

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Créez un fichier .xml contenant les informations suivantes :

    <VersioningConfiguration>
      <Status>Suspended</Status>
    </VersioningConfiguration>
  3. Utilisez cURL pour appeler l'API XML avec une requête de bucket PUT et un paramètre de chaîne de requête versioning.

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

    Où :

    • XML_FILE_NAME correspond au fichier que vous avez créé à l'étape 2.
    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

Vérifier si la gestion des versions d'objets est activée

Pour vérifier si la gestion des versions d'objets est activée sur un bucket, procédez comme suit :

gsutil

Exécutez la commande gsutil versioning get :

gsutil versioning get gs://BUCKET_NAME

BUCKET_NAME est le nom du bucket concerné. Exemple : my-bucket.

Si la gestion des versions d'objets est activée, vous obtenez une réponse semblable à la suivante :

gs://my-bucket: Enabled

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Exécutez cURL pour appeler l'API JSON avec une requête de bucket GET :

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

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

API XML

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Utilisez cURL pour appeler l'API XML avec une requête de bucket GET et un paramètre de chaîne de requête versioning.

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

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

Utiliser des objets avec des versions gérées

Les sections suivantes expliquent comment utiliser des objets avec des versions gérées. Pour obtenir un exemple détaillé d'utilisation de la gestion des versions d'objets, consultez la section Exemple de gestion des versions d'objets.

Répertorier les versions d'objet archivées

Pour répertorier les versions actives et archivées d'un objet, et afficher leurs numéros de génération (generation), procédez comme suit :

gsutil

Exécutez la commande gsutil ls -a :

gsutil ls -a gs://BUCKET_NAME

BUCKET_NAME est le nom du bucket concerné. Exemple : my-bucket.

La réponse est semblable à ceci :

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

Exemples de code

C++

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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::runtime_error(object_metadata.status().message());
    }

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

Go

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Node.js.

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

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

Python

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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)

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

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Exécutez la commande cURL pour appeler l'API JSON avec une requête LIST Object :

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

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

Les versions archivées des objets possèdent une propriété timeDeleted.

API XML

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Utilisez cURL pour appeler l'API XML avec une requête de bucket GET et un paramètre de chaîne de requête versions.

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

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket concerné. Exemple : my-bucket.

Les résultats de la requête GET peuvent être légèrement différents lorsque vous utilisez le paramètre de requête versions. Plus précisément, Cloud Storage renvoie les informations suivantes lorsque vous incluez un paramètre versions dans votre requête :

  • Un élément Version qui contient des informations sur chaque objet.
  • Un élément DeletedTime qui contient l'heure d'archivage de l'objet (en cas de suppression ou de remplacement).
  • Un élément IsLatest qui indique si l'objet spécifique constitue la dernière version.
  • Un élément NextGenerationMarker est renvoyé si la liste d'objets est partielle, ce qui se produit lorsqu'un bucket dispose de nombreuses versions d'objets. Utilisez la valeur de cet élément dans le paramètre generationmarker des requêtes ultérieures si vous souhaitez reprendre à partir de votre dernier point. Le paramètre de requête generationmarker s'utilise de la même manière que le paramètre marker, qui sert à parcourir une liste associée à un bucket sans versions gérées.

Accéder aux versions d'objet archivées

Pour utiliser la version archivée d'un objet lors de l'exécution de tâches, telles que le téléchargement de l'objet, l'affichage ou la mise à jour de ses métadonnées, procédez comme suit :

gsutil

  1. Ajoutez le numéro de génération (generation) de la version archivée au nom de l'objet :

    OBJECT_NAME#GENERATION_NUMBER

    Où :

    • OBJECT_NAME correspond au nom de la version archivée. Exemple : pets/dog.png.
    • GENERATION_NUMBER correspond au numéro de génération de la version archivée. Exemple : 1560468815691234.
  2. À l'aide de la chaîne de l'étape 1, procédez comme vous le feriez normalement avec la version active de l'objet.

API REST

API JSON

  1. Ajoutez le numéro de génération (generation) de la version archivée à la fin de l'URI de l'objet :

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

    Où :

    • BUCKET_NAME correspond au nom du bucket contenant la version archivée. Exemple : my-bucket.
    • OBJECT_NAME correspond au nom de la version archivée. Exemple : pets/dog.png.
    • GENERATION_NUMBER correspond au numéro de génération de la version archivée. Exemple : 1560468815691234.
  2. À l'aide de l'URI de l'étape 1, procédez comme vous le feriez normalement avec la version active de l'objet.

API XML

  1. Ajoutez le numéro de génération (generation) de la version archivée à la fin de l'URI de l'objet :

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

    Où :

    • BUCKET_NAME correspond au nom du bucket contenant la version archivée. Exemple : my-bucket.
    • OBJECT_NAME correspond au nom de la version archivée. Exemple : pets/dog.png.
    • GENERATION_NUMBER correspond au numéro de génération de la version archivée. Exemple : 1560468815691234.
  2. À l'aide de l'URI de l'étape 1, procédez comme vous le feriez normalement avec la version active de l'objet.

Copier des versions d'objet archivées

Pour copier une version archivée d'un objet, procédez comme suit :

gsutil

Exécutez la commande gsutil cp :

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

Où :

  • SOURCE_BUCKET_NAME correspond au nom du bucket contenant la version archivée que vous souhaitez copier. Exemple : my-bucket.
  • SOURCE_OBJECT_NAME correspond au nom de la version archivée que vous souhaitez copier. Exemple : pets/dog.png.
  • GENERATION_NUMBER correspond au numéro de génération de la version archivée que vous souhaitez copier. Exemple : 1560468815691234.
  • DESTINATION_BUCKET_NAME correspond au nom du bucket dans lequel vous souhaitez copier la version archivée. Exemple : my-bucket.
  • DESTINATION_OBJECT_NAME correspond au nom de la copie de la version archivée. Exemple : pets/shiba.png.

Si l'opération réussit, la réponse se présente comme suit :

Operation completed over 1 objects/58.8 KiB.

Exemples de code

C++

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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::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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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();
    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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Node.js.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const srcBucketName = 'Name of the source bucket, e.g. my-bucket';
// const srcFilename = 'Name of the source file, e.g. file.txt';
// const destBucketName = 'Name of the destination bucket, e.g. my-other-bucket';
// const destFilename = 'Destination name of file, e.g. file.txt';
// const generation = 'The generation of file to copy, e.g. 1'

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

Python

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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)

    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,
        )
    )

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Exécutez la commande cURL pour appeler l'API JSON avec une requête POST Object :

    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"

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • SOURCE_BUCKET_NAME correspond au nom du bucket contenant la version archivée que vous souhaitez copier. Exemple : my-bucket.
    • SOURCE_OBJECT_NAME correspond au nom de la version archivée que vous souhaitez copier. Exemple : pets/dog.png.
    • DESTINATION_BUCKET_NAME correspond au nom du bucket dans lequel vous souhaitez copier la version archivée. Exemple : my-bucket.
    • NAME OF COPY correspond au nom de la copie de la version archivée. Exemple : pets/shiba.png.
    • GENERATION_NUMBER correspond au numéro de génération de la version archivée que vous souhaitez copier. Exemple : 1560468815691234.

API XML

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Exécutez la commande cURL pour appeler l'API XML avec une requête PUT Object :

    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"

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • SOURCE_BUCKET_NAME correspond au nom du bucket contenant la version archivée que vous souhaitez copier. Exemple : my-bucket.
    • SOURCE_OBJECT_NAME correspond au nom de la version archivée que vous souhaitez copier. Exemple : pets/dog.png.
    • GENERATION_NUMBER correspond au numéro de génération de la version archivée que vous souhaitez copier. Exemple : 1560468815691234.
    • DESTINATION_BUCKET_NAME correspond au nom du bucket dans lequel vous souhaitez copier la version archivée. Exemple : my-bucket.
    • NAME OF COPY correspond au nom de la copie de la version archivée. Exemple : pets/shiba.png.

Supprimer des versions d'objet archivées

Pour supprimer une version archivée d'un objet, procédez comme suit :

gsutil

Exécutez la commande gsutil rm :

gsutil rm gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER

Où :

  • BUCKET_NAME correspond au nom du bucket contenant la version archivée que vous souhaitez supprimer. Exemple : my-bucket.
  • OBJECT_NAME correspond au nom de la version archivée que vous souhaitez supprimer. Exemple : pets/dog.png.
  • GENERATION_NUMBER correspond au numéro de génération de la version archivée que vous souhaitez supprimer. Exemple : 1560468815691234.

Si l'opération réussit, la réponse se présente comme suit :

Operation completed over 1 objects.

Exemples de code

C++

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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";
}

Java

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Node.js.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to delete, e.g. file.txt';
// const generation = 'Generation of file to delete, e.g. 1';

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

Python

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage 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(
        "Generation {} of blob {} was deleted from {}".format(
            generation, blob_name, bucket_name
        )
    )

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Exécutez la commande cURL pour appeler l'API JSON avec une requête 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"

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket contenant la version archivée que vous souhaitez supprimer. Exemple : my-bucket.
    • OBJECT_NAME correspond au nom de la version archivée que vous souhaitez supprimer. Exemple : pets/dog.png.
    • GENERATION_NUMBER correspond au numéro de génération de la version archivée que vous souhaitez supprimer. Exemple : 1560468815691234.

API XML

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground pour utiliser vos propres identifiants OAuth.
  2. Exécutez la commande cURL pour appeler l'API XML avec une requête DELETE Object :

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

    Où :

    • OAUTH2_TOKEN correspond au jeton d'accès que vous avez généré à l'étape 1.
    • BUCKET_NAME correspond au nom du bucket contenant la version archivée que vous souhaitez supprimer. Exemple : my-bucket.
    • OBJECT_NAME correspond au nom de la version archivée que vous souhaitez supprimer. Exemple : pets/dog.png.
    • GENERATION_NUMBER correspond au numéro de génération de la version archivée que vous souhaitez supprimer. Exemple : 1560468815691234.

Étape suivante