Objektspeicherklassen ändern

Auf dieser Seite wird beschrieben, wie Sie die Storage-Klasse von Objekten in einem Bucket durch Überschreiben des Objekts ändern. Informationen dazu, wie Sie Objekt-Storage-Klassen ändern, ohne ein Objekt zu überschreiben, finden Sie in Verwaltung des Objektlebenszyklus.

Console

Einzelne Objekt-Storage-Klassen können nicht über die Console festgelegt werden. Verwenden Sie stattdessen gsutil.

gsutil

Verwenden Sie das Flag -s in einem rewrite-Befehl. Beispiel:

gsutil rewrite -s [STORAGE_CLASS] gs://[PATH_TO_OBJECT]

Dabei gilt:

  • [STORAGE_CLASS] ist die neue Speicherklasse für Ihr Objekt. Beispiel: nearline.
  • [PATH_TO_OBJECT] ist der Name des Objekts, dessen Klasse Sie ändern möchten. Beispiel: pets/dog.png

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 bucket_name, std::string object_name,
   std::string storage_class) {
  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.RewriteObjectBlocking(
          bucket_name, object_name, bucket_name, object_name,
          gcs::WithObjectMetadata(
              gcs::ObjectMetadata().set_storage_class(storage_class)));

  if (!object_metadata) {
    throw std::runtime_error(object_metadata.status().message());
  }

  std::cout << "Changed storage class of object " << object_metadata->name()
            << " in bucket " << object_metadata->bucket() << " to "
            << object_metadata->storage_class() << "\n";
}

Java

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

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageClass;
import com.google.cloud.storage.StorageOptions;

public class ChangeObjectStorageClass {
  public static void changeObjectStorageClass(
      String projectId, String bucketName, String objectName) {
    // 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";

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

    // See the StorageClass documentation for other valid storage classes:
    // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/storage/StorageClass.html
    StorageClass storageClass = StorageClass.COLDLINE;

    // You can't change an object's storage class directly, the only way is to rewrite the object
    // with the
    // desired storage class
    Storage.CopyRequest request =
        Storage.CopyRequest.newBuilder()
            .setSource(blobId)
            .setTarget(BlobInfo.newBuilder(blobId).setStorageClass(storageClass).build())
            .build();
    Blob updatedBlob = storage.copy(request).getResult();

    System.out.println(
        "Object "
            + objectName
            + " in bucket "
            + bucketName
            + " had its storage class set to "
            + updatedBlob.getStorageClass().name());
  }
}

REST APIs

JSON API

  • 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.
  • Erstellen Sie eine JSON-Datei, die die folgenden Informationen enthält:

    {
      "storageClass": "[STORAGE_CLASS]"
    }

    Dabei gilt:

    • [STORAGE_CLASS] ist die neue Speicherklasse für Ihr Objekt. Beispiel: nearline.
  • Verwenden Sie cURL, um die JSON API mit einer POST-Objektanfrage aufzurufen:

    curl -X POST --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]/o/[OBJECT_NAME]/rewriteTo/b/[BUCKET_NAME]/o/[OBJECT_NAME]"

    Wobei:

    • [JSON_FILE_NAME] ist der Name der JSON-Datei, die Sie in Schritt 2 erstellt haben.
    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
    • [BUCKET_NAME] ist der Name des Buckets, der das ursprüngliche Objekt enthält. Beispiel: my-bucket.
    • [OBJECT_NAME] ist der Name des Objekts. Beispiel: pets/dog.png.
  • 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 --data-binary @[OBJECT] \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        -H "Content-Type: [OBJECT_CONTENT_TYPE]" \
        -H "x-goog-storage-class: [STORAGE_CLASS]" \
        "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]"

      Wobei:

      • [OBJECT] ist der lokale Pfad zu dem Objekt, dessen Speicherklasse Sie ändern möchten. Sie müssen das Objekt beim Ändern der Speicherklasse mit der XML API neu laden. Beispiel: Desktop/dog.png.
      • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
      • [OBJECT_CONTENT_TYPE] ist der Inhaltstyp des Objekts. Beispiel: image/png.
      • [STORAGE_CLASS] ist die neue Speicherklasse für Ihr Objekt. Beispiel: nearline.
      • [BUCKET_NAME] ist der Name des Buckets mit dem Objekt, das Sie überschreiben möchten. Beispiel: my-bucket.
      • [OBJECT_NAME] ist der Name des Objekts, das Sie überschreiben. Beispiel: pets/dog.png

    Nächste Schritte