重新命名、複製及移動物件

這個頁面說明如何重新命名、複製物件,以及在 Cloud Storage 中的值區內或值區之間移動物件。如需物件總覽,請參閱關鍵字詞物件命名需求

重新命名物件

如要重新命名 Cloud Storage 值區中的現有物件,請按照以下指示操作:

主控台

  1. 在 Google Cloud Platform Console 中開啟 Cloud Storage 瀏覽器。
    開啟 Cloud Storage 瀏覽器
  2. 找到您要重新命名的物件。

  3. 按一下和物件相關的 [more options] (更多選項) 按鈕 (縱向排列的三個點)。

  4. 按一下 [Rename] (重新命名)

  5. 在出現的重疊視窗中,為物件輸入新名稱。

  6. 按一下 [Rename] (重新命名)

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

  if (!object_metadata) {
    throw std::runtime_error(object_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 參考說明文件

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 err
}
if err := src.Delete(ctx); err != nil {
	return err
}

Java

詳情請參閱 Cloud Storage Java API 參考說明文件

CopyWriter copyWriter = blob.copyTo(destBucket, destBlob);
Blob copiedBlob = copyWriter.getResult();
boolean deleted = blob.delete();

Node.js

詳情請參閱 Cloud Storage Node.js API 參考說明文件

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

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

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

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

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

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 參考說明文件

def rename_blob(bucket_name, blob_name, new_name):
    """Renames a blob."""
    storage_client = storage.Client()
    bucket = storage_client.get_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 參考說明文件

# project_id  = "Your Google Cloud project ID"
# 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 project_id: project_id
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 取得授權存取憑證。將 Playground 設為使用自己的 OAuth 憑證。
  2. 使用 cURL 透過 POST 物件要求呼叫 JSON API

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://www.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 物件要求呼叫 JSON API:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://www.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 取得授權存取憑證。將 Playground 設為使用自己的 OAuth 憑證。
  2. 使用 cURL 透過 PUT物件要求呼叫 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 物件要求呼叫 JSON 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 值區複製物件,請按照以下指示操作:

主控台

  1. 在 Google Cloud Platform Console 中開啟 Cloud Storage 瀏覽器。
    開啟 Cloud Storage 瀏覽器
  2. 找到您要複製的物件。

  3. 按一下和物件相關的 [more options] (更多選項) 按鈕 (縱向排列的三個點)。

  4. 按一下 [Copy] (複製)。

  5. 在出現的重疊視窗中,按一下 [Browse] (瀏覽)。

  6. 選取已複製物件的目的地及名稱。

  7. 按一下 [Select] (選取)

  8. 按一下 [Copy] (複製)。

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 參考說明文件

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 err
}

Java

詳情請參閱 Cloud Storage Java API 參考說明文件

CopyWriter copyWriter = blob.copyTo(bucketName);
Blob copiedBlob = copyWriter.getResult();

Node.js

詳情請參閱 Cloud Storage Node.js API 參考說明文件

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

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

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

// 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}.`
);

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 參考說明文件

def copy_blob(bucket_name, blob_name, new_bucket_name, new_blob_name):
    """Copies a blob from one bucket to another with a new name."""
    storage_client = storage.Client()
    source_bucket = storage_client.get_bucket(bucket_name)
    source_blob = source_bucket.blob(blob_name)
    destination_bucket = storage_client.get_bucket(new_bucket_name)

    new_blob = source_bucket.copy_blob(
        source_blob, destination_bucket, new_blob_name)

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

Ruby

詳情請參閱 Cloud Storage Ruby API 參考說明文件

# project_id         = "Your Google Cloud project ID"
# 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 project_id: project_id
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 取得授權存取憑證。將 Playground 設為使用自己的 OAuth 憑證。
  2. 使用 cURL 透過 POST 物件要求呼叫 JSON API

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://www.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 取得授權存取憑證。將 Playground 設為使用自己的 OAuth 憑證。
  2. 使用 cURL 透過 PUT物件要求呼叫 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 中移動物件的方式如下:

主控台

  1. 在 Google Cloud Platform Console 中開啟 Cloud Storage 瀏覽器。
    開啟 Cloud Storage 瀏覽器
  2. 找到您要移動的物件。

  3. 按一下和物件相關的 [more options] (更多選項) 按鈕 (縱向排列的三個點)。

  4. 按一下 [Move] (移動)

  5. 在出現的重疊視窗中,按一下 [Browse] (瀏覽)。

  6. 選取要將物件移動到哪個目的地。

  7. 按一下 [Select] (選取)

  8. 按一下 [Move] (移動)

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

  if (!object_metadata) {
    throw std::runtime_error(object_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";
}

Java

詳情請參閱 Cloud Storage Java API 參考說明文件

CopyWriter copyWriter = blob.copyTo(destBucket, destBlob);
Blob copiedBlob = copyWriter.getResult();
boolean deleted = blob.delete();

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 取得授權存取憑證。將 Playground 設為使用自己的 OAuth 憑證。
  2. 使用 cURL 透過 POST 物件要求呼叫 JSON API

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://www.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 物件要求呼叫 JSON API:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://www.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 取得授權存取憑證。將 Playground 設為使用自己的 OAuth 憑證。
  2. 使用 cURL 透過 PUT物件要求呼叫 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 物件要求呼叫 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

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Storage
需要協助嗎?請前往我們的支援網頁