すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトのメタデータ管理 (Go SDK V1)

最終更新日:Nov 29, 2025

Object Storage Service (OSS) に格納されるオブジェクトは、キー、データ、およびオブジェクトのメタデータで構成されます。オブジェクトのメタデータは、オブジェクトのプロパティを記述します。これには、標準 HTTP ヘッダーとユーザー定義メタデータが含まれます。標準 HTTP ヘッダーを設定して、キャッシュポリシーや強制ダウンロードポリシーなどのカスタム HTTP リクエストポリシーを定義できます。また、ユーザー定義メタデータを設定して、オブジェクトの目的やプロパティを識別することもできます。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスが作成されます。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。

  • オブジェクトのメタデータを設定するには、oss:PutObject 権限が必要です。オブジェクトのメタデータを取得するには、oss:GetObject 権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。

サンプルコード

オブジェクトのアップロード時のメタデータ設定

警告

オブジェクトのアップロード時にメタデータを設定する場合、バケット内に同じ名前のオブジェクトが存在しないことを確認してください。存在する場合、既存のオブジェクトは上書きされます。オブジェクトが上書きされるのを防ぐ方法の詳細については、「オブジェクトが上書きされるのを防ぐ」をご参照ください。

package main

import (
	"log"
	"strings"
	"time"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// バケット名を指定します。例:examplebucket。
	bucketName := "examplebucket" // 実際のバケット名に置き換えてください。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket: %v", err)
	}

	// オブジェクトのメタデータを設定します。たとえば、有効期限を 2049 年 1 月 10 日 23:00:00 GMT に設定し、アクセス権限を公開読み取り (public-read) に設定し、カスタムメタデータ MyProp を MyPropVal に設定します。
	expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
	options := []oss.Option{
		oss.Expires(expires),
		oss.ObjectACL(oss.ACLPublicRead),
		oss.Meta("MyProp", "MyPropVal"),
	}

	// データストリームからオブジェクトをアップロードします。
	// オブジェクトの完全なパスを指定します。完全なパスにはバケット名は含まれません。例:exampledir/exampleobject.txt。
	objectName := "exampledir/exampleobject.txt" // 実際のオブジェクトパスに置き換えてください。
	err = bucket.PutObject(objectName, strings.NewReader("MyObjectValue"), options...)
	if err != nil {
		log.Fatalf("Failed to upload object: %v", err)
	}

	// オブジェクトのメタデータを取得します。
	props, err := bucket.GetObjectDetailedMeta(objectName)
	if err != nil {
		log.Fatalf("Failed to get object detailed metadata: %v", err)
	}
	log.Printf("Object Meta: %+v\n", props)
}

既存オブジェクトのメタデータ変更

...

// 一度に 1 つのメタデータエントリを変更します。
err = bucket.SetObjectMeta(objectName, oss.Meta("MyMeta", "MyMetaValue1"))
if err != nil {
	log.Fatalf("Failed to set single metadata: %v", err)
}

// 一度に複数のメタデータエントリを変更します。
options := []oss.Option{
	oss.Meta("MyMeta", "MyMetaValue2"),
	oss.Meta("MyObjectLocation", "HangZhou"),
}
err = bucket.SetObjectMeta(objectName, options...)
if err != nil {
	log.Fatalf("Failed to set multiple metadatas: %v", err)
}

// オブジェクトのメタデータを取得します。
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
	log.Fatalf("Failed to get object detailed metadata: %v", err)
}
log.Printf("Object Meta: %+v\n", props)

オブジェクトのメタデータ取得

...

// オブジェクトのメタデータを取得します。
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
	log.Fatalf("Failed to get object detailed metadata: %v", err)
}
log.Printf("Object Meta: %+v\n", props)

よくある質問

同じ名前のオブジェクトによる上書きを防止する方法

同じ名前のオブジェクトによる上書きを防止するには、次のいずれかの方法を使用します:

  • バージョン管理の有効化

    バージョン管理を有効にすると、オブジェクトが上書きされた場合、バケット内に以前のバージョンとして保存されます。以前のバージョンはいつでも復元できます。詳細については、「バージョン管理の有効化」をご参照ください。

  • 上書きを防止するためのパラメーターをアップロードリクエストに含める

    アップロードリクエストのヘッダーに x-oss-forbid-overwrite パラメーターを含め、その値を true に設定します。バケット内の既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、アップロードは失敗し、FileAlreadyExists エラーが返されます。詳細については、「PutObject」をご参照ください。

関連ドキュメント

  • オブジェクトのメタデータに関する完全なサンプルコードについては、GitHub の例をご参照ください。

  • シンプルアップロード中にオブジェクトのメタデータを設定するために使用される API 操作の詳細については、「PutObject」をご参照ください。

  • 既存のオブジェクトのメタデータを変更するために使用される API 操作の詳細については、「CopyObject」をご参照ください。

  • オブジェクトのメタデータを取得するために使用される API 操作の詳細については、「GetObjectMeta」をご参照ください。