Copier.Copy メソッドを使用してオブジェクトのストレージクラスを変換することをお勧めします。このメソッドは、単純コピーとマルチパートコピーのインターフェイスを統合し、リクエストのパラメーターに基づいて適切なメソッドを自動的に選択します。
次のコードは、Copier.Copy メソッドを使用して、オブジェクトのストレージクラスを標準からアーカイブに変換する例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // リージョン。
srcBucketName string // ソースバケットの名前。
srcObjectName string // ソースオブジェクトの名前。
destBucketName string // デスティネーションバケットの名前。
destObjectName string // デスティネーションオブジェクトの名前。
)
// コマンドラインパラメーターを初期化するために使用する init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&srcBucketName, "src-bucket", "", "ソースバケットの名前。")
flag.StringVar(&srcObjectName, "src-object", "", "ソースオブジェクトの名前。")
flag.StringVar(&destBucketName, "dest-bucket", "", "デスティネーションバケットの名前。")
flag.StringVar(&destObjectName, "dest-object", "", "デスティネーションオブジェクトの名前。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// ソースバケット名が指定されているかどうかを確認します。
if len(srcBucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーターです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーターです。リージョンが必要です。")
}
// デスティネーションバケット名が指定されていない場合は、ソースバケット名が使用されます。
if len(destBucketName) == 0 {
destBucketName = srcBucketName
}
// ソースオブジェクト名が指定されているかどうかを確認します。
if len(srcObjectName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーターです。ソースオブジェクト名が必要です。")
}
// デスティネーションオブジェクト名が指定されているかどうかを確認します。
if len(destObjectName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーターです。デスティネーションオブジェクト名が必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// Copier を作成します。
c := client.NewCopier()
// オブジェクトをコピーするリクエストを作成します。
request := &oss.CopyObjectRequest{
Bucket: oss.Ptr(destBucketName), // デスティネーションバケットの名前。
Key: oss.Ptr(destObjectName), // デスティネーションオブジェクトの名前。
SourceKey: oss.Ptr(srcObjectName), // ソースオブジェクトの名前。
SourceBucket: oss.Ptr(srcBucketName), // ソースバケットの名前。
StorageClass: oss.StorageClassArchive, // ストレージクラスをアーカイブとして指定します。
}
// ソースオブジェクトをコピーします。
result, err := c.Copy(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトのコピーに失敗しました %v", err) // コピーに失敗した場合は、エラーメッセージを記録して終了します。
}
// 結果を表示します。
log.Printf("オブジェクトのコピー結果:%#v\n", result)
}