객체 메타데이터 보기 및 수정

개념으로 이동

이 페이지에서는 Cloud Storage에 저장된 객체와 연결된 메타데이터를 보고 수정하는 방법에 대해 설명합니다.

이 페이지에서는 데이터에 액세스할 수 있는 사람을 관리하는 ID 및 액세스 관리(IAM) 정책 또는 객체 액세스제어 목록(ACL)을 보거나 수정하는 방법을 다루지 않습니다. 이러한 작업을 수행하기 위한 가이드는 IAM 권한 사용ACL 생성 및 관리를 참조하세요.

객체 메타데이터 보기

객체와 연결된 메타데이터를 보려면 다음 안내를 따르세요.

Console

  1. Google Cloud Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 목록에서 원하는 객체가 포함된 버킷의 이름을 클릭합니다.

    객체 탭이 선택된 상태로 버킷 세부정보 페이지가 열립니다.

  3. 객체(폴더에 있을 수 있음)로 이동합니다.

    객체의 크기 및 스토리지 클래스와 같은 특정 객체 메타데이터 값이 객체 이름과 함께 표시됩니다.

  4. 객체와 연결된 추가 작업 메뉴()를 클릭합니다.

  5. 메타데이터 수정을 클릭합니다.

    오버레이 창에 수정할 수 있는 객체의 메타데이터 현재 값이 표시됩니다.

Cloud Storage 브라우저에서 실패한 작업에 대한 자세한 오류 정보를 가져오는 방법은 문제해결을 참조하세요.

gsutil

gsutil stat 명령어를 사용합니다.

gsutil stat gs://[BUCKET_NAME]/[OBJECT_NAME]

각 항목의 의미는 다음과 같습니다.

  • [BUCKET_NAME]은 메타데이터를 보려는 객체가 포함된 버킷의 이름입니다. 예를 들면 my-awesome-bucket입니다.
  • [OBJECT_NAME]은 메타데이터를 보려는 객체의 이름입니다. 예를 들면 cat.jpeg입니다.

성공하면 다음 예시와 비슷한 응답이 표시됩니다.

gs://my-awesome-bucket/cat.jpeg:
Creation time:          Fri, 03 Feb 2017 22:43:31 GMT
Update time:            Wed, 10 May 2017 18:33:07 GMT
Storage class:          STANDARD
Content-Length:         11012
Content-Type:           image/jpeg
Metadata:
    Breed:              Tabby
Hash (crc32c):          HQbzrB==
Hash (md5):             OBydg25+pPG1Cwawjsl7DA==
ETag:                   CJCh9apA9dECAEs=
Generation:             1486161811706000
Metageneration:         11

코드 샘플

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& object_name) {
  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.GetObjectMetadata(bucket_name, object_name);

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

  std::cout << "The metadata for object " << object_metadata->name()
            << " in bucket " << object_metadata->bucket() << " is "
            << *object_metadata << "\n";
}

C#

자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.

private void GetMetadata(string bucketName, string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    Console.WriteLine($"Bucket:\t{storageObject.Bucket}");
    Console.WriteLine($"CacheControl:\t{storageObject.CacheControl}");
    Console.WriteLine($"ComponentCount:\t{storageObject.ComponentCount}");
    Console.WriteLine($"ContentDisposition:\t{storageObject.ContentDisposition}");
    Console.WriteLine($"ContentEncoding:\t{storageObject.ContentEncoding}");
    Console.WriteLine($"ContentLanguage:\t{storageObject.ContentLanguage}");
    Console.WriteLine($"ContentType:\t{storageObject.ContentType}");
    Console.WriteLine($"Crc32c:\t{storageObject.Crc32c}");
    Console.WriteLine($"ETag:\t{storageObject.ETag}");
    Console.WriteLine($"Generation:\t{storageObject.Generation}");
    Console.WriteLine($"Id:\t{storageObject.Id}");
    Console.WriteLine($"Kind:\t{storageObject.Kind}");
    Console.WriteLine($"KmsKeyName:\t{storageObject.KmsKeyName}");
    Console.WriteLine($"Md5Hash:\t{storageObject.Md5Hash}");
    Console.WriteLine($"MediaLink:\t{storageObject.MediaLink}");
    Console.WriteLine($"Metageneration:\t{storageObject.Metageneration}");
    Console.WriteLine($"Name:\t{storageObject.Name}");
    Console.WriteLine($"Size:\t{storageObject.Size}");
    Console.WriteLine($"StorageClass:\t{storageObject.StorageClass}");
    Console.WriteLine($"TimeCreated:\t{storageObject.TimeCreated}");
    Console.WriteLine($"Updated:\t{storageObject.Updated}");
    bool? eventBasedHoldOrNull = storageObject?.EventBasedHold;
    bool eventBasedHold =
        eventBasedHoldOrNull.HasValue ? eventBasedHoldOrNull.Value : false;
    Console.WriteLine("Event-based hold enabled? {0}", eventBasedHold);
    bool? temporaryHoldOrNull = storageObject?.TemporaryHold;
    bool temporaryHold =
        temporaryHoldOrNull.HasValue ? temporaryHoldOrNull.Value : false;
    Console.WriteLine("Temporary hold enabled? {0}", temporaryHold);
    Console.WriteLine($"RetentionExpirationTime\t{storageObject.RetentionExpirationTime}");
}

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.

ctx := context.Background()

ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
o := client.Bucket(bucket).Object(object)
attrs, err := o.Attrs(ctx)
if err != nil {
	return nil, err
}
log.Printf("Bucket: %v\n", attrs.Bucket)
log.Printf("CacheControl: %v\n", attrs.CacheControl)
log.Printf("ContentDisposition: %v\n", attrs.ContentDisposition)
log.Printf("ContentEncoding: %v\n", attrs.ContentEncoding)
log.Printf("ContentLanguage: %v\n", attrs.ContentLanguage)
log.Printf("ContentType: %v\n", attrs.ContentType)
log.Printf("Crc32c: %v\n", attrs.CRC32C)
log.Printf("Generation: %v\n", attrs.Generation)
log.Printf("KmsKeyName: %v\n", attrs.KMSKeyName)
log.Printf("Md5Hash: %v\n", attrs.MD5)
log.Printf("MediaLink: %v\n", attrs.MediaLink)
log.Printf("Metageneration: %v\n", attrs.Metageneration)
log.Printf("Name: %v\n", attrs.Name)
log.Printf("Size: %v\n", attrs.Size)
log.Printf("StorageClass: %v\n", attrs.StorageClass)
log.Printf("TimeCreated: %v\n", attrs.Created)
log.Printf("Updated: %v\n", attrs.Updated)
log.Printf("Event-based hold enabled? %t\n", attrs.EventBasedHold)
log.Printf("Temporary hold enabled? %t\n", attrs.TemporaryHold)
log.Printf("Retention expiration time %v\n", attrs.RetentionExpirationTime)
log.Print("\n\nMetadata\n")
for key, value := range attrs.Metadata {
	log.Printf("\t%v = %v\n", key, value)
}

return attrs, nil

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageException;
import com.google.cloud.storage.StorageOptions;
import java.util.Date;
import java.util.Map;

public class GetObjectMetadata {
  public static void getObjectMetadata(String projectId, String bucketName, String blobName)
      throws StorageException {
    // 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();

    // Select all fields
    // Fields can be selected individually e.g. Storage.BlobField.CACHE_CONTROL
    Blob blob =
        storage.get(bucketName, blobName, Storage.BlobGetOption.fields(Storage.BlobField.values()));

    // Print blob metadata
    System.out.println("Bucket: " + blob.getBucket());
    System.out.println("CacheControl: " + blob.getCacheControl());
    System.out.println("ComponentCount: " + blob.getComponentCount());
    System.out.println("ContentDisposition: " + blob.getContentDisposition());
    System.out.println("ContentEncoding: " + blob.getContentEncoding());
    System.out.println("ContentLanguage: " + blob.getContentLanguage());
    System.out.println("ContentType: " + blob.getContentType());
    System.out.println("Crc32c: " + blob.getCrc32c());
    System.out.println("Crc32cHexString: " + blob.getCrc32cToHexString());
    System.out.println("ETag: " + blob.getEtag());
    System.out.println("Generation: " + blob.getGeneration());
    System.out.println("Id: " + blob.getBlobId());
    System.out.println("KmsKeyName: " + blob.getKmsKeyName());
    System.out.println("Md5Hash: " + blob.getMd5());
    System.out.println("Md5HexString: " + blob.getMd5ToHexString());
    System.out.println("MediaLink: " + blob.getMediaLink());
    System.out.println("Metageneration: " + blob.getMetageneration());
    System.out.println("Name: " + blob.getName());
    System.out.println("Size: " + blob.getSize());
    System.out.println("StorageClass: " + blob.getStorageClass());
    System.out.println("TimeCreated: " + new Date(blob.getCreateTime()));
    System.out.println("Last Metadata Update: " + new Date(blob.getUpdateTime()));
    Boolean temporaryHoldIsEnabled = (blob.getTemporaryHold() != null && blob.getTemporaryHold());
    System.out.println("temporaryHold: " + (temporaryHoldIsEnabled ? "enabled" : "disabled"));
    Boolean eventBasedHoldIsEnabled =
        (blob.getEventBasedHold() != null && blob.getEventBasedHold());
    System.out.println("eventBasedHold: " + (eventBasedHoldIsEnabled ? "enabled" : "disabled"));
    if (blob.getRetentionExpirationTime() != null) {
      System.out.println("retentionExpirationTime: " + new Date(blob.getRetentionExpirationTime()));
    }
    if (blob.getMetadata() != null) {
      System.out.println("\n\n\nUser metadata:");
      for (Map.Entry<String, String> userMetadata : blob.getMetadata().entrySet()) {
        System.out.println(userMetadata.getKey() + "=" + userMetadata.getValue());
      }
    }
  }
}

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 filename = 'File to access, 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 getMetadata() {
  // Gets the metadata for the file
  const [metadata] = await storage
    .bucket(bucketName)
    .file(filename)
    .getMetadata();

  console.log(`File: ${metadata.name}`);
  console.log(`Bucket: ${metadata.bucket}`);
  console.log(`Storage class: ${metadata.storageClass}`);
  console.log(`Self link: ${metadata.selfLink}`);
  console.log(`ID: ${metadata.id}`);
  console.log(`Size: ${metadata.size}`);
  console.log(`Updated: ${metadata.updated}`);
  console.log(`Generation: ${metadata.generation}`);
  console.log(`Metageneration: ${metadata.metageneration}`);
  console.log(`Etag: ${metadata.etag}`);
  console.log(`Owner: ${metadata.owner}`);
  console.log(`Component count: ${metadata.component_count}`);
  console.log(`Crc32c: ${metadata.crc32c}`);
  console.log(`md5Hash: ${metadata.md5Hash}`);
  console.log(`Cache-control: ${metadata.cacheControl}`);
  console.log(`Content-type: ${metadata.contentType}`);
  console.log(`Content-disposition: ${metadata.contentDisposition}`);
  console.log(`Content-encoding: ${metadata.contentEncoding}`);
  console.log(`Content-language: ${metadata.contentLanguage}`);
  console.log(`Media link: ${metadata.mediaLink}`);
  console.log(`KMS Key Name: ${metadata.kmsKeyName}`);
  console.log(`Temporary Hold: ${metadata.temporaryHold}`);
  console.log(`Event-based hold: ${metadata.eventBasedHold}`);
  console.log(
    `Effective Expiration Time: ${metadata.effectiveExpirationTime}`
  );
  console.log(`Metadata: ${metadata.metadata}`);
}

getMetadata().catch(console.error);

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.

use Google\Cloud\Storage\StorageClient;

/**
 * List object metadata.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 *
 * @return void
 */
function object_metadata($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $info = $object->info();
    if (isset($info['name'])) {
        printf('Blob: %s' . PHP_EOL, $info['name']);
    }
    if (isset($info['bucket'])) {
        printf('Bucket: %s' . PHP_EOL, $info['bucket']);
    }
    if (isset($info['storageClass'])) {
        printf('Storage class: %s' . PHP_EOL, $info['storageClass']);
    }
    if (isset($info['id'])) {
        printf('ID: %s' . PHP_EOL, $info['id']);
    }
    if (isset($info['size'])) {
        printf('Size: %s' . PHP_EOL, $info['size']);
    }
    if (isset($info['updated'])) {
        printf('Updated: %s' . PHP_EOL, $info['updated']);
    }
    if (isset($info['generation'])) {
        printf('Generation: %s' . PHP_EOL, $info['generation']);
    }
    if (isset($info['metageneration'])) {
        printf('Metageneration: %s' . PHP_EOL, $info['metageneration']);
    }
    if (isset($info['etag'])) {
        printf('Etag: %s' . PHP_EOL, $info['etag']);
    }
    if (isset($info['crc32c'])) {
        printf('Crc32c: %s' . PHP_EOL, $info['crc32c']);
    }
    if (isset($info['md5Hash'])) {
        printf('MD5 Hash: %s' . PHP_EOL, $info['md5Hash']);
    }
    if (isset($info['contentType'])) {
        printf('Content-type: %s' . PHP_EOL, $info['contentType']);
    }
    if (isset($info['temporaryHold'])) {
        printf("Temporary hold: " . ($info['temporaryHold'] ? "enabled" : "disabled") . PHP_EOL);
    }
    if (isset($info['eventBasedHold'])) {
        printf("Event-based hold: " . ($info['eventBasedHold'] ? "enabled" : "disabled") . PHP_EOL);
    }
    if (isset($info['retentionExpirationTime'])) {
        printf("retentionExpirationTime: " . $info['retentionExpirationTime'] . PHP_EOL);
    }
    if (isset($info['metadata'])) {
        printf('Metadata: %s', print_r($info['metadata'], true));
    }
}

Python

자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.

from google.cloud import storage

def blob_metadata(bucket_name, blob_name):
    """Prints out a blob's metadata."""
    # bucket_name = 'your-bucket-name'
    # blob_name = 'your-object-name'

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

    print("Blob: {}".format(blob.name))
    print("Bucket: {}".format(blob.bucket.name))
    print("Storage class: {}".format(blob.storage_class))
    print("ID: {}".format(blob.id))
    print("Size: {} bytes".format(blob.size))
    print("Updated: {}".format(blob.updated))
    print("Generation: {}".format(blob.generation))
    print("Metageneration: {}".format(blob.metageneration))
    print("Etag: {}".format(blob.etag))
    print("Owner: {}".format(blob.owner))
    print("Component count: {}".format(blob.component_count))
    print("Crc32c: {}".format(blob.crc32c))
    print("md5_hash: {}".format(blob.md5_hash))
    print("Cache-control: {}".format(blob.cache_control))
    print("Content-type: {}".format(blob.content_type))
    print("Content-disposition: {}".format(blob.content_disposition))
    print("Content-encoding: {}".format(blob.content_encoding))
    print("Content-language: {}".format(blob.content_language))
    print("Metadata: {}".format(blob.metadata))
    print("Temporary hold: ", "enabled" if blob.temporary_hold else "disabled")
    print(
        "Event based hold: ",
        "enabled" if blob.event_based_hold else "disabled",
    )
    if blob.retention_expiration_time:
        print(
            "retentionExpirationTime: {}".format(
                blob.retention_expiration_time
            )
        )

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.

# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of file in Google Cloud Storage"

require "google/cloud/storage"

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

puts "Name: #{file.name}"
puts "Bucket: #{bucket.name}"
puts "Storage class: #{bucket.storage_class}"
puts "ID: #{file.id}"
puts "Size: #{file.size} bytes"
puts "Created: #{file.created_at}"
puts "Updated: #{file.updated_at}"
puts "Generation: #{file.generation}"
puts "Metageneration: #{file.metageneration}"
puts "Etag: #{file.etag}"
puts "Owners: #{file.acl.owners.join ','}"
puts "Crc32c: #{file.crc32c}"
puts "md5_hash: #{file.md5}"
puts "Cache-control: #{file.cache_control}"
puts "Content-type: #{file.content_type}"
puts "Content-disposition: #{file.content_disposition}"
puts "Content-encoding: #{file.content_encoding}"
puts "Content-language: #{file.content_language}"
puts "KmsKeyName: #{file.kms_key}"
puts "Event-based hold enabled?: #{file.event_based_hold?}"
puts "Temporary hold enaled?: #{file.temporary_hold?}"
puts "Retention Expiration: #{file.retention_expires_at}"
puts "Metadata:"
file.metadata.each do |key, value|
  puts " - #{key} = #{value}"
end

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
  2. cURL을 사용하여 GET 객체 요청으로 JSON API를 호출합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • [OAUTH2_TOKEN]은 1단계에서 생성한 액세스 토큰입니다.
    • [BUCKET_NAME]은 메타데이터를 보려는 객체가 포함된 버킷의 이름입니다. 예를 들면 my-bucket입니다.
    • [OBJECT_NAME]은 메타데이터를 보려는 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

XML API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
  2. cURL을 사용하여 HEAD 객체 요청으로 XML API를 호출합니다.

    curl -I HEAD \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]"

    각 항목의 의미는 다음과 같습니다.

    • [OAUTH2_TOKEN]은 1단계에서 생성한 액세스 토큰입니다.
    • [BUCKET_NAME]은 메타데이터를 보려는 객체가 포함된 버킷의 이름입니다. 예를 들면 my-bucket입니다.
    • [OBJECT_NAME]은 메타데이터를 보려는 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

객체 메타데이터 수정

객체와 연결된 메타데이터를 수정하려면 다음 안내를 따르세요.

Console

  1. Google Cloud Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 목록에서 원하는 객체가 포함된 버킷의 이름을 클릭합니다.

    객체 탭이 선택된 상태로 버킷 세부정보 페이지가 열립니다.

  3. 객체(폴더에 있을 수 있음)로 이동합니다.

  4. 객체와 연결된 추가 작업 메뉴()를 클릭합니다.

  5. 메타데이터 수정을 클릭합니다.

  6. 오버레이 창이 나타나면 원하는 대로 메타데이터를 수정합니다.

    • 표준 메타데이터 필드의 경우 을 수정하세요.

    • + 항목 추가 버튼을 클릭하여 나만의 커스텀 메타데이터를 추가하세요.

    • 커스텀 메타데이터의 을 모두 수정할 수 있습니다.

    • 연결된 X를 클릭하여 커스텀 메타데이터를 삭제하세요.

  7. 저장을 클릭합니다.

Cloud Storage 브라우저에서 실패한 작업에 대한 자세한 오류 정보를 가져오는 방법은 문제해결을 참조하세요.

gsutil

gsutil setmeta -h 명령어를 사용합니다.

gsutil setmeta -h "[METADATA_KEY]:[METADATA_VALUE]" gs://[BUCKET_NAME]/[OBJECT_NAME]

각 항목의 의미는 다음과 같습니다.

  • [METADATA_KEY]는 설정하려는 메타데이터의 키입니다. 예를 들면 Content-Type입니다.
  • [METADATA_VALUE]는 설정하려는 메타데이터의 값입니다. 예를 들면 image/png입니다.
  • [BUCKET_NAME]은 메타데이터를 수정하려는 객체가 포함된 버킷의 이름입니다. 예를 들면 my-bucket입니다.
  • [OBJECT_NAME]은 메타데이터를 수정하려는 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

성공하면 응답은 다음 예시와 같습니다.

Operation completed over 1 objects.

gsutil을 사용하여 커스텀 메타데이터를 추가하는 경우 gsutil에서 표준 HTTP 헤더가 아닌 커스텀 메타데이터 속성임을 인식하도록 메타데이터 키에 x-goog-meta- 프리픽스를 지정합니다. 메타데이터 키 자체는 x-goog-meta- 프리픽스와 함께 저장되지 않습니다. 커스텀 "[METADATA_KEY]:[METADATA_VALUE]"의 예시는 "x-goog-meta-dogbreed:shibainu"입니다.

코드 샘플

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& object_name, std::string const& key,
   std::string const& value) {
  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.GetObjectMetadata(bucket_name, object_name);

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

  gcs::ObjectMetadata desired = *object_metadata;
  desired.mutable_metadata().emplace(key, value);

  StatusOr<gcs::ObjectMetadata> updated =
      client.UpdateObject(bucket_name, object_name, desired,
                          gcs::Generation(object_metadata->generation()));

  if (!updated) throw std::runtime_error(updated.status().message());
  std::cout << "Object updated. The full metadata after the update is: "
            << *updated << "\n";
}

C#

자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.

C#을 사용하여 객체와 연결된 메타데이터를 수정하려면 PatchObject 참조 문서를 확인하세요.

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.

Go를 사용하여 객체와 연결된 메타데이터를 수정하려면 ObjectHandle 참조 문서를 확인하세요.

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.util.HashMap;
import java.util.Map;

public class SetObjectMetadata {
  public static void setObjectMetadata(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();
    Map<String, String> newMetadata = new HashMap<>();
    newMetadata.put("keyToAddOrUpdate", "value");
    Blob blob = storage.get(bucketName, objectName);
    // Does an upsert operation, if the key already exists it's replaced by the new value, otherwise
    // it's added.
    blob.toBuilder().setMetadata(newMetadata).build().update();

    System.out.println(
        "Updated custom metadata for object " + objectName + " in bucket " + bucketName);
  }
}

Node.js

자세한 내용은 Cloud Storage Node.js API 참조 문서를 확인하세요.

NodeJS를 사용하여 객체와 연결된 메타데이터를 수정하려면 File 참조 문서를 확인하세요.

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.

PHP를 사용하여 객체에 연결된 메타데이터를 수정하려면 Google Cloud 클라이언트 라이브러리 참조 문서를 참조하세요.

Python

자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.

Python을 사용하여 객체와 관련된 메타데이터를 수정하려면 Blob/객체 참조 문서를 확인하세요.

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.

Ruby를 사용하여 객체와 관련된 메타데이터를 수정하려면 Google::Cloud::Storage::File 클래스 참조 문서를 확인하세요.

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
  2. 수정하려는 메타데이터가 포함된 .json 파일을 만듭니다.

    contentType과 같은 고정 키 메타데이터를 추가하거나 수정하려면 다음 형식을 사용하세요.

    {
      "[STANDARD_METADATA_KEY]": "[STANDARD_METADATA_VALUE]"
    }

    각 항목의 의미는 다음과 같습니다.

    • [STANDARD_METADATA_KEY]는 추가하거나 수정할 메타데이터의 키입니다. 예를 들면 Content-Type입니다.
    • [STANDARD_METADATA_VALUE]는 추가하거나 수정할 메타데이터의 값입니다. 예를 들면 image/png입니다.

    커스텀 메타데이터를 추가하거나 수정하려면 다음 형식을 사용하세요.

    {
      "metadata": {
        "[CUSTOM_METADATA_KEY]": "[CUSTOM_METADATA_VALUE]"
      }
    }

    각 항목의 의미는 다음과 같습니다.

    • [CUSTOM_METADATA_KEY]는 추가하거나 수정할 커스텀 메타데이터 키입니다. 예를 들면 dogbreed입니다.
    • [CUSTOM_METADATA_VALUE]는 커스텀 메타데이터 키에 연결할 값입니다. 예를 들면 shibainu입니다.

    커스텀 메타데이터 항목을 삭제하려면 다음 형식을 사용하세요.

    {
      "metadata": {
        "[CUSTOM_METADATA_KEY]": null
      }
    }

    각 항목의 의미는 다음과 같습니다.

    • [CUSTOM_METADATA_KEY]는 삭제할 커스텀 메타데이터의 키입니다. 예를 들면 dogbreed입니다.
  3. cURL을 사용하여 PATCH 객체 요청으로 JSON API를 호출합니다.

    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]/o/[OBJECT_NAME]"

    각 항목의 의미는 다음과 같습니다.

    • [JSON_FILE_NAME]은 2단계에서 만든 JSON 파일의 이름입니다.
    • [OAUTH2_TOKEN]은 1단계에서 생성한 액세스 토큰의 이름입니다.
    • [BUCKET_NAME]은 메타데이터를 수정하려는 객체가 포함된 버킷의 이름입니다. 예를 들면 my-bucket입니다.
    • [OBJECT_NAME]은 메타데이터를 수정하려는 객체의 이름입니다. 예를 들면 pets/dog.png입니다.

UPDATE 객체 요청을 사용하여 객체의 메타데이터를 변경할 수도 있습니다. 이 방법을 사용하면 요청에 명시적으로 지정되지 않은 모든 메타데이터가 객체의 메타데이터에서 삭제됩니다.

XML API

XML API로 작업 시 메타데이터는 객체를 업로드하거나 이동시키거나 덮어쓰기할 때처럼 객체가 작성되는 시기에만 설정할 수 있습니다. 다음 가이드라인과 더불어 객체 업로드와 같은 안내를 따르세요.

  • 설정 중인 각 메타데이터 값의 요청 헤더에 -H "[METADATA_KEY]:[METADATA_VALUE]"를 추가하세요. 예를 들면 -H "Content-Type:image/png"입니다.

  • 모든 커스텀 메타데이터 값에 프리픽스 x-goog-meta-를 추가하세요. 커스텀 "[METADATA_KEY]:[METADATA_VALUE]"의 예시는 "x-goog-meta-dogbreed:shibainu"입니다.

자세한 내용은 XML용 객체 업로드를 참조하세요.

다음 단계