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

Object Storage Service:C# 2.0 用 OSS SDK を使用したオブジェクトのコピー

最終更新日:Jul 09, 2025

このトピックでは、C# 2.0 用 OSS SDK の CopyObjectAsync メソッドを使用して、5 GiB 未満のオブジェクトを、同じリージョン内のソースバケットからデスティネーションバケットにコピーする方法について説明します。 デスティネーションバケットは、ソースバケットと同じバケットでも、別のバケットでもかまいません。

注意事項

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

  • オブジェクトをコピーするには、ソースオブジェクトに対する読み取り権限と、デスティネーションバケットに対する読み取りおよび書き込み権限が必要です。

  • ソースバケットとデスティネーションバケットは、同じリージョンにある必要があります。 たとえば、中国 (杭州) リージョンにあるバケット内のオブジェクトを、中国 (青島) リージョンにあるバケットにコピーすることはできません。

  • ソースバケットとデスティネーションバケットに保持ポリシーが構成されていないことを確認してください。 構成されている場合、指定したオブジェクトは変更不可です。 というエラーメッセージが返されます。

権限

デフォルトでは、Alibaba Cloud アカウントにはすべての権限があります。 RAM ユーザーまたは Alibaba Cloud アカウント下の RAM ロールには、デフォルトでは権限がありません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。

API

アクション

定義

CopyObject

oss:GetObject

同じリージョン内のバケット内またはバケット間でオブジェクトをコピーします。

oss:PutObject

oss:GetObjectVersion

versionId を使用してソースオブジェクトのバージョンを指定する場合は、この権限も必要です。

oss:GetObjectTagging

x-oss-tagging を使用してオブジェクトタグをコピーする場合は、これらの権限が必要です。

oss:PutObjectTagging

oss:GetObjectVersionTagging

versionId を使用してソースオブジェクトの特定のバージョンのタグを指定する場合は、この権限も必要です。

kms:GenerateDataKey

オブジェクトをコピーするときに、デスティネーションオブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合は、これら 2 つの権限が必要です。

kms:Decrypt

サンプルコード

以下は、5 GiB 未満のオブジェクトをソースバケットからデスティネーションバケットにコピーするためのサンプルコードです。

using OSS = AlibabaCloud.OSS.V2;  // コードの冗長性を軽減するために、OSS SDK のエイリアスを定義します。

var region = "cn-hangzhou";  // (必須)バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
var endpoint = null as string;  // (オプション)OSS へのアクセスに使用するエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var srcBucket = "your srcBucket name";  // (必須)ソースバケットの名前を指定します。
var srcKey = "your srcKey name";  // (必須)フォルダ/オブジェクト名形式でソースオブジェクト名を指定します。
var dstBucket = "your dstBucket name";  // (必須)デスティネーションバケットの名前を指定します。
var dstKey = "your dstkey name";  // (必須)フォルダ/オブジェクト名形式でデスティネーションオブジェクト名を指定します。

// 環境変数から認証情報 (AccessKey ペアなど) を取得し、SDK のデフォルト構成を読み込みます。
var cfg = OSS.Configuration.LoadDefault();
// 環境変数からアクセス認証情報を取得します (形式: OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET)。
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンを指定します。
cfg.Region = region;   
// エンドポイントが指定されている場合、endpoint パラメータのデフォルト値は上書きされます。
if(endpoint != null)
{
    cfg.Endpoint = endpoint;
} 

// 前述の構成を使用して、OSSClient インスタンスを作成します。
using var client = new OSS.Client(cfg); 

// CopyObjectAsync メソッドを呼び出して、オブジェクトをコピーします。
var result = await client.CopyObjectAsync(new OSS.Models.CopyObjectRequest()
{
    Bucket = dstBucket,
    Key = dstKey,
    SourceBucket = srcBucket,
    SourceKey = srcKey
});

// 結果を出力します。
Console.WriteLine("CopyObject done");  // 操作は完了です。
Console.WriteLine($"StatusCode: {result.StatusCode}");  // HTTP ステータスコード。
Console.WriteLine($"RequestId: {result.RequestId}");  // リクエスト ID。リクエストのデバッグまたは追跡に使用されます。
Console.WriteLine("Response Headers:");  // レスポンスヘッダー。
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value));  // すべてのレスポンスヘッダーをトラバースして出力します。

関連情報

オブジェクトをコピーするための完全なサンプルコードについては、「CopyObject.cs」をご参照ください。