オブジェクトの名前変更、コピー、移動

このページでは、Cloud Storage のバケットにあるオブジェクトの名前を変更する方法、バケット内やバケット間でオブジェクトをコピー、移動する方法について説明します。オブジェクトの概要については、主な用語オブジェクトの命名要件をご覧ください。

オブジェクト名の変更

Cloud Storage バケットにある既存のオブジェクトの名前を変更するには:

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. バケットのリストで、名前を変更するオブジェクトを含むバケットの名前をクリックします。

    [バケットの詳細] ページが開き、[オブジェクト ] タブが選択されています。

  3. フォルダ内にあるオブジェクトに移動します。

  4. オブジェクトに関連付けられた [その他の操作] メニュー()をクリックします。

  5. [名前を変更] をクリックします。

  6. 上に重なったウィンドウで、オブジェクトの新しい名前を入力します。

  7. [名前を変更] をクリックします。

Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。

gsutil

gsutil mv コマンドを使用します。

gsutil mv gs://[BUCKET_NAME]/[OLD_OBJECT_NAME] gs://[BUCKET_NAME]/[NEW_OBJECT_NAME]

ここで

  • [BUCKET_NAME] は、名前を変更するオブジェクトが格納されているバケットの名前です。例: my-bucket
  • [OLD_OBJECT_NAME] は、名前を変更するオブジェクトの名前です。例: pets/dog.png
  • [NEW_OBJECT_NAME] は、オブジェクトに付ける新しい名前です。例: pets/shiba.png

成功した場合は、次の例のようなレスポンスになります。

Operation completed over 1 objects/58.8 KiB.

コードサンプル

C++

詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

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

  google::cloud::Status status =
      client.DeleteObject(bucket_name, old_object_name);
  if (!status.ok()) throw std::runtime_error(status.message());

  std::cout << "Renamed " << old_object_name << " to " << new_object_name
            << " in bucket " << bucket_name << "\n";
}

C#

詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

private void MoveObject(string bucketName, string sourceObjectName,
    string destObjectName)
{
    var storage = StorageClient.Create();
    storage.CopyObject(bucketName, sourceObjectName, bucketName,
        destObjectName);
    storage.DeleteObject(bucketName, sourceObjectName);
    Console.WriteLine($"Moved {sourceObjectName} to {destObjectName}.");
}

Go

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

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

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

// moveFile moves an object into another location.
func moveFile(w io.Writer, bucket, object string) error {
	// bucket := "bucket-name"
	// object := "object-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()

	dstName := object + "-rename"
	src := client.Bucket(bucket).Object(object)
	dst := client.Bucket(bucket).Object(dstName)

	if _, err := dst.CopierFrom(src).Run(ctx); err != nil {
		return fmt.Errorf("Object(%q).CopierFrom(%q).Run: %v", dstName, object, err)
	}
	if err := src.Delete(ctx); err != nil {
		return fmt.Errorf("Object(%q).Delete: %v", object, err)
	}
	fmt.Fprintf(w, "Blob %v moved to %v.\n", object, dstName)
	return nil
}

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.CopyWriter;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class MoveObject {
  public static void moveObject(
      String projectId, String sourceBucketName, String objectName, String targetBucketName) {
    // 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 ID of the bucket to move the object objectName to
    // String targetBucketName = "target-object-bucket"

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Blob blob = storage.get(sourceBucketName, objectName);
    // Write a copy of the object to the target bucket
    CopyWriter copyWriter = blob.copyTo(targetBucketName, objectName);
    Blob copiedBlob = copyWriter.getResult();
    // Delete the original blob now that we've copied to where we want it, finishing the "move"
    // operation
    blob.delete();

    System.out.println(
        "Moved object "
            + objectName
            + " from bucket "
            + sourceBucketName
            + " to "
            + copiedBlob.getBucket());
  }
}

Node.js

詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const srcFilename = 'File to move, e.g. file.txt';
// const destFilename = 'Destination for file, e.g. moved.txt';

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

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

async function moveFile() {
  // Moves the file within the bucket
  await storage.bucket(bucketName).file(srcFilename).move(destFilename);

  console.log(
    `gs://${bucketName}/${srcFilename} moved to gs://${bucketName}/${destFilename}.`
  );
}

moveFile().catch(console.error);

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\Storage\StorageClient;

/**
 * Move an object to a new name and/or bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $newBucketName the destination bucket name.
 * @param string $newObjectName the destination object name.
 *
 * @return void
 */
function move_object($bucketName, $objectName, $newBucketName, $newObjectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->copy($newBucketName, ['name' => $newObjectName]);
    $object->delete();
    printf('Moved gs://%s/%s to gs://%s/%s' . PHP_EOL,
        $bucketName,
        $objectName,
        $newBucketName,
        $newObjectName);
}

Python

詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import storage

def rename_blob(bucket_name, blob_name, new_name):
    """Renames a blob."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # new_name = "new-object-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    new_blob = bucket.rename_blob(blob, new_name)

    print("Blob {} has been renamed to {}".format(blob.name, new_blob.name))

Ruby

詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of file in Google Cloud Storage to rename"
# new_name    = "File will be renamed to this new name"

require "google/cloud/storage"

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

renamed_file = file.copy new_name

file.delete

puts "#{file_name} has been renamed to #{renamed_file.name}"

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、POST Object リクエストで JSON API を呼び出します。

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OLD_OBJECT_NAME]/rewriteTo/b/[BUCKET_NAME]/o/[NEW_OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、名前を変更するオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [OLD_OBJECT_NAME] は、名前を変更するオブジェクトの名前です。例: pets/dog.png
    • [NEW_OBJECT_NAME] は、オブジェクトに付ける新しい名前です。例: pets/shiba.png
  3. cURL を使用して、DELETE Object リクエストで JSON API を呼び出します。

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OLD_OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、元のオブジェクトと名前を変更したオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [OLD_OBJECT_NAME] はオブジェクトの元の名前です。例: pets/dog.png

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、PUT Object リクエストで XML API を呼び出します。

    curl -X PUT \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "x-goog-copy-source: [BUCKET_NAME]/[OLD_OBJECT_NAME]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[NEW_OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、名前を変更するオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [OLD_OBJECT_NAME] は、名前を変更するオブジェクトの名前です。例: pets/dog.png
    • [NEW_OBJECT_NAME] は、オブジェクトに付ける新しい名前です。例: pets/shiba.png
  3. cURL を使用して DELETE Object リクエストで XML API を呼び出します。

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OLD_OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、元のオブジェクトと名前を変更したオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [OLD_OBJECT_NAME] はオブジェクトの元の名前です。例: pets/dog.png

オブジェクトのコピー

いずれかの Cloud Storage バケットのオブジェクトをコピーするには:

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. バケットのリストで、コピーするオブジェクトを含むバケットの名前をクリックします。

    [バケットの詳細] ページが開き、[オブジェクト ] タブが選択されています。

  3. フォルダ内にあるオブジェクトに移動します。

  4. オブジェクトに関連付けられた [その他の操作] メニュー()をクリックします。

  5. [コピー] をクリックします。

  6. 上に重なったウィンドウで [開く] をクリックします。

  7. オブジェクトのコピー先と、コピーしたオブジェクトの名前を選択します。

  8. [選択] をクリックします。

  9. [コピー] をクリックします。

Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。

gsutil

gsutil cp コマンドを使用します。

gsutil cp gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME] gs://[DESTINATION_BUCKET_NAME]/[NAME_OF_COPY]

ここで

  • [SOURCE_BUCKET_NAME] は、コピーするオブジェクトが格納されているバケットの名前です。例: my-bucket
  • [SOURCE_OBJECT_NAME] は、コピーするオブジェクトの名前です。例: pets/dog.png
  • [DESTINATION_BUCKET_NAME] は、オブジェクトのコピー先のバケットの名前です。例: another-bucket
  • [NAME_OF_COPY] は、オブジェクトのコピーに付ける名前です。例: shiba.png

成功した場合は、次の例のようなレスポンスになります。

Operation completed over 1 objects/58.8 KiB.

コードサンプル

C#

詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

private void CopyObject(string sourceBucketName, string sourceObjectName,
    string destBucketName, string destObjectName)
{
    var storage = StorageClient.Create();
    storage.CopyObject(sourceBucketName, sourceObjectName,
        destBucketName, destObjectName);
    Console.WriteLine($"Copied {sourceBucketName}/{sourceObjectName} to "
        + $"{destBucketName}/{destObjectName}.");
}

Go

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

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

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

// copyFile copies an object into specified bucket.
func copyFile(w io.Writer, dstBucket, srcBucket, srcObject string) error {
	// dstBucket := "bucket-1"
	// srcBucket := "bucket-2"
	// srcObject := "object"
	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()

	dstObject := srcObject + "-copy"
	src := client.Bucket(srcBucket).Object(srcObject)
	dst := client.Bucket(dstBucket).Object(dstObject)

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

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

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

public class CopyObject {
  public static void copyObject(
      String projectId, String sourceBucketName, String objectName, String targetBucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of the bucket the original object is in
    // String sourceBucketName = "your-source-bucket";

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

    // The ID of the bucket to copy the object to
    // String targetBucketName = "target-object-bucket"

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Blob blob = storage.get(sourceBucketName, objectName);

    // This keeps the original name, you could also do
    // copyTo(targetBucketName, "target-object-name") to change the name
    blob.copyTo(targetBucketName);

    System.out.println(
        "Copied object "
            + objectName
            + " from bucket "
            + sourceBucketName
            + " to "
            + targetBucketName);
  }
}

Node.js

詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

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

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

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

async function copyFile() {
  // Copies the file to the other bucket
  await storage
    .bucket(srcBucketName)
    .file(srcFilename)
    .copy(storage.bucket(destBucketName).file(destFilename));

  console.log(
    `gs://${srcBucketName}/${srcFilename} copied to gs://${destBucketName}/${destFilename}.`
  );
}

copyFile().catch(console.error);

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\Storage\StorageClient;

/**
 * Copy an object to a new name and/or bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $newBucketName the destination bucket name.
 * @param string $newObjectName the destination object name.
 * @return void
 */
function copy_object($bucketName, $objectName, $newBucketName, $newObjectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->copy($newBucketName, ['name' => $newObjectName]);
    printf('Copied gs://%s/%s to gs://%s/%s' . PHP_EOL,
        $bucketName, $objectName, $newBucketName, $newObjectName);
}

Python

詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import storage

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

    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
    )

    print(
        "Blob {} in bucket {} copied to blob {} in bucket {}.".format(
            source_blob.name,
            source_bucket.name,
            blob_copy.name,
            destination_bucket.name,
        )
    )

Ruby

詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

# source_bucket_name = "Source bucket to copy file from"
# source_file_name   = "Source file name"
# dest_bucket_name   = "Destination bucket to copy file to"
# dest_file_name     = "Destination file name"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new
bucket  = storage.bucket source_bucket_name
file    = bucket.file source_file_name

destination_bucket = storage.bucket dest_bucket_name
destination_file   = file.copy destination_bucket.name, dest_file_name

puts "#{file.name} in #{bucket.name} copied to " \
     "#{destination_file.name} in #{destination_bucket.name}"

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、POST Object リクエストで JSON API を呼び出します。

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

    ここで

    • [OAUTH2_TOKEN] は手順 1 で生成したアクセス トークンの名前です。
    • [SOURCE_BUCKET_NAME] は、コピーするオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [SOURCE_OBJECT_NAME] は、コピーするオブジェクトの名前です。例: pets/dog.png
    • [DESTINATION_BUCKET_NAME] は、オブジェクトのコピー先のバケットの名前です。例: another-bucket
    • [NAME_OF_COPY] は、オブジェクトのコピーに付ける名前です。例: shiba.png

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、PUT Object リクエストで XML API を呼び出します。

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

    ここで

    • [OAUTH2_TOKEN] は手順 1 で生成したアクセス トークンの名前です。
    • [SOURCE_BUCKET_NAME] は、コピーするオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [SOURCE_OBJECT_NAME] は、コピーするオブジェクトの名前です。例: pets/dog.png
    • [DESTINATION_BUCKET_NAME] は、オブジェクトのコピー先のバケットの名前です。例: another-bucket
    • [NAME_OF_COPY] は、オブジェクトのコピーに付ける名前です。例: shiba.png

オブジェクトの移動

Cloud Storage のオブジェクトを移動するには:

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. バケットのリストで、移動するオブジェクトを含むバケットの名前をクリックします。

    [バケットの詳細] ページが開き、[オブジェクト ] タブが選択されています。

  3. フォルダ内にあるオブジェクトに移動します。

  4. オブジェクトに関連付けられた [その他の操作] メニュー()をクリックします。

  5. [移動] をクリックします。

  6. 上に重なったウィンドウで [開く] をクリックします。

  7. オブジェクトの移動先を選択します。

  8. [選択] をクリックします。

  9. [移動] をクリックします。

Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。

gsutil

gsutil mv コマンドを使用します。

gsutil mv gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME] gs://[DESTINATION_BUCKET_NAME]/[DESTINATION_OBJECT_NAME]

ここで

  • [SOURCE_BUCKET_NAME] は、移動するオブジェクトが格納されているバケットの名前です。例: my-bucket
  • [SOURCE_OBJECT_NAME] は、移動するオブジェクトの名前です。例: pets/dog.png
  • [DESTINATION_BUCKET_NAME] は、オブジェクトの移動先のバケットの名前です。例: another-bucket
  • [DESTINATION_OBJECT_NAME] は、新しい場所でのオブジェクトに付ける名前です。例: shiba.png

成功した場合は、次の例のようなレスポンスになります。

Operation completed over 1 objects/58.8 KiB.

コードサンプル

C++

詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

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

  google::cloud::Status status =
      client.DeleteObject(bucket_name, old_object_name);
  if (!status.ok()) throw std::runtime_error(status.message());

  std::cout << "Renamed " << old_object_name << " to " << new_object_name
            << " in bucket " << bucket_name << "\n";
}

Go

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

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

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

// moveFile moves an object into another location.
func moveFile(w io.Writer, bucket, object string) error {
	// bucket := "bucket-name"
	// object := "object-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()

	dstName := object + "-rename"
	src := client.Bucket(bucket).Object(object)
	dst := client.Bucket(bucket).Object(dstName)

	if _, err := dst.CopierFrom(src).Run(ctx); err != nil {
		return fmt.Errorf("Object(%q).CopierFrom(%q).Run: %v", dstName, object, err)
	}
	if err := src.Delete(ctx); err != nil {
		return fmt.Errorf("Object(%q).Delete: %v", object, err)
	}
	fmt.Fprintf(w, "Blob %v moved to %v.\n", object, dstName)
	return nil
}

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.CopyWriter;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class MoveObject {
  public static void moveObject(
      String projectId, String sourceBucketName, String objectName, String targetBucketName) {
    // 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 ID of the bucket to move the object objectName to
    // String targetBucketName = "target-object-bucket"

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Blob blob = storage.get(sourceBucketName, objectName);
    // Write a copy of the object to the target bucket
    CopyWriter copyWriter = blob.copyTo(targetBucketName, objectName);
    Blob copiedBlob = copyWriter.getResult();
    // Delete the original blob now that we've copied to where we want it, finishing the "move"
    // operation
    blob.delete();

    System.out.println(
        "Moved object "
            + objectName
            + " from bucket "
            + sourceBucketName
            + " to "
            + copiedBlob.getBucket());
  }
}

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\Storage\StorageClient;

/**
 * Move an object to a new name and/or bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $newBucketName the destination bucket name.
 * @param string $newObjectName the destination object name.
 *
 * @return void
 */
function move_object($bucketName, $objectName, $newBucketName, $newObjectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->copy($newBucketName, ['name' => $newObjectName]);
    $object->delete();
    printf('Moved gs://%s/%s to gs://%s/%s' . PHP_EOL,
        $bucketName,
        $objectName,
        $newBucketName,
        $newObjectName);
}

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、POST Object リクエストで JSON API を呼び出します。

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

    ここで

    • [OAUTH2_TOKEN] は手順 1 で生成したアクセス トークンの名前です。
    • [SOURCE_BUCKET_NAME] は、移動するオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [SOURCE_OBJECT_NAME] は、移動するオブジェクトの名前です。例: pets/dog.png
    • [DESTINATION_BUCKET_NAME] は、オブジェクトの移動先のバケットの名前です。例: another-bucket
    • [DESTINATION_OBJECT_NAME] は、新しい場所でのオブジェクトに付ける名前です。例: shiba.png
  3. cURL を使用して、DELETE Object リクエストで JSON API を呼び出します。

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET_NAME]/o/[SOURCE_OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [SOURCE_BUCKET_NAME] は元のオブジェクトを格納するバケットの名前です。例: my-bucket
    • [SOURCE_OBJECT_NAME] は、元のオブジェクトの名前です。例: pets/dog.png

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して、PUT Object リクエストで XML API を呼び出します。

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

    ここで

    • [OAUTH2_TOKEN] は手順 1 で生成したアクセス トークンの名前です。
    • [SOURCE_BUCKET_NAME] は、移動するオブジェクトが格納されているバケットの名前です。例: my-bucket
    • [SOURCE_OBJECT_NAME] は、移動するオブジェクトの名前です。例: pets/dog.png
    • [DESTINATION_BUCKET_NAME] は、オブジェクトの移動先のバケットの名前です。例: another-bucket
    • [DESTINATION_OBJECT_NAME] は、新しい場所でのオブジェクトに付ける名前です。例: shiba.png
  3. cURL を使用して、DELETE Object リクエストで JSON API を呼び出します。

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]"

    ここで

    • [OAUTH2_TOKEN] は手順 1 で生成したアクセス トークンの名前です。
    • [SOURCE_BUCKET_NAME] は元のオブジェクトを格納するバケットの名前です。例: my-bucket
    • [SOURCE_OBJECT_NAME] は、元のオブジェクトの名前です。例: pets/dog.png

次のステップ