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

Object Storage Service:C# SDK を使用した OSS への単純なアップロード

最終更新日:Nov 09, 2025

このトピックでは、単純なアップロードを使用してローカルファイルを Object Storage Service (OSS) にすばやくアップロードする方法について説明します。この方法は簡単で、ローカルファイルをすばやくアップロードする必要があるシナリオに適しています。

考慮事項

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

権限

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

API

アクション

定義

PutObject

oss:PutObject

オブジェクトをアップロードします。

oss:PutObjectTagging

オブジェクトをアップロードする際、x-oss-tagging を通じてオブジェクトタグを指定する場合、この権限が必要です。

kms:GenerateDataKey

オブジェクトをアップロードする際、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、これら 2 つの権限が必要です。

kms:Decrypt

ローカルファイルのアップロード

アクセス可能な既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、既存のオブジェクトはアップロードされたオブジェクトによって上書きされます。

次の表に、オブジェクトをアップロードする際に設定する必要がある共通パラメーターを示します。

パラメーター

説明

bucket

バケットの名前。

バケット名は、次の命名規則に準拠する必要があります。

  • 名前には、小文字、数字、ハイフン (-) のみを含めることができます。

  • 名前は、小文字または数字で開始および終了する必要があります。

  • 名前の長さは 3~63 文字である必要があります。

key

オブジェクトの完全なパス。完全なパスにバケット名を含めないでください。

オブジェクト名は、次の命名規則に準拠する必要があります。

  • UTF-8 エンコーディングを使用します。

  • 名前の長さは 1~1,023 文字である必要があります。

  • 名前をスラッシュ (/) またはバックスラッシュ (\) で始めることはできません。

次のサンプルコードは、ローカルファイルをバケットにアップロードする方法を示しています。

using System.Text; // 文字エンコーディング (UTF-8 エンコード文字列など) を処理するために System.Text 名前空間をインポートします
using OSS = AlibabaCloud.OSS.V2; // Alibaba Cloud OSS SDK のエイリアスを作成して、後続の使用を簡素化します

var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョンを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します
var bucket = "your bucket name";  // 必須。ターゲットバケット名を設定します
var endpoint = null as string;  // オプション。OSS サービスにアクセスするためのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します
var key = "your object key"; // 必須。アップロードするオブジェクト名を指定します。フォーマット: (folder/objectName)
var filePath = "/Users/yourLocalPath/yourFileName"; // 必須。ローカルファイルパスを指定します

// OSS SDK のデフォルト設定を読み込みます。これにより、環境変数から認証情報 (AccessKey など) が自動的に読み取られます
var cfg = OSS.Configuration.LoadDefault();
// 認証に環境変数を使用するように明示的に設定します。これは ID 検証に使用されます (フォーマット: OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 設定でバケットリージョンを設定します
cfg.Region = region;
// エンドポイントが指定されている場合、デフォルトのエンドポイントをオーバーライドします
if(endpoint != null)
{
    cfg.Endpoint = endpoint;
}

// 設定情報を使用して OSS クライアントインスタンスを作成します
using var client = new OSS.Client(cfg);

// PutObjectFromFileAsync メソッドを呼び出してローカルファイルをアップロードします
var result = await client.PutObjectFromFileAsync(new()
{
    Bucket = bucket,
    Key = key
}, filePath);

// アップロード結果を表示します
Console.WriteLine("PutObjectFromFile done");  // 操作が完了したことを示します
Console.WriteLine($"StatusCode: {result.StatusCode}");  // HTTP ステータスコード
Console.WriteLine($"RequestId: {result.RequestId}");  // RequestId。Alibaba Cloud によるトラブルシューティングに使用されます
Console.WriteLine("Response Headers:");  // 応答ヘッダー情報
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value));  // すべての応答ヘッダーを走査して出力します

バイト配列のアップロード

using System.Text; // 文字エンコーディング (UTF-8 エンコード文字列など) を処理するために System.Text 名前空間をインポートします
using OSS = AlibabaCloud.OSS.V2; // Alibaba Cloud OSS SDK のエイリアスを作成して、後続の使用を簡素化します

var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョンを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します
var bucket = "your bucket name";  // 必須。ターゲットバケット名を設定します
var endpoint = null as string;  // オプション。OSS サービスにアクセスするためのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します
var key = "your object key"; // 必須。アップロードするオブジェクト名を指定します。フォーマット: (folder/objectName)

// OSS SDK のデフォルト設定を読み込みます。これにより、環境変数から認証情報 (AccessKey など) が自動的に読み取られます
var cfg = OSS.Configuration.LoadDefault();
// 認証に環境変数を使用するように明示的に設定します。これは ID 検証に使用されます (フォーマット: OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 設定でバケットリージョンを設定します
cfg.Region = region;
// エンドポイントが指定されている場合、デフォルトのエンドポイントをオーバーライドします
if(endpoint != null)
{
    cfg.Endpoint = endpoint;
}

// 設定情報を使用して OSS クライアントインスタンスを作成します
using var client = new OSS.Client(cfg);

// アップロードするコンテンツ。コンテンツ例: 単純な文字列 "hello oss!"。実際のシナリオでは、ファイルストリーム、バイト配列などになります。
var content = "hello oss!";
// 文字列を UTF-8 エンコードのバイト配列に変換し、MemoryStream でラップします
// MemoryStream はメモリ内のデータストリームを処理するために使用され、小さなファイルのアップロードに適しています。大きなファイルの場合は FileStream を推奨します
var bodyStream = new MemoryStream(Encoding.UTF8.GetBytes(content));

// PutObjectAsync メソッドを呼び出してオブジェクトを非同期にアップロードします (Bucket、Key、Body を含むリクエストオブジェクトが必要です)
// このメソッドは、bodyStream のデータをターゲットバケットの指定された Key パスにアップロードします
var result = await client.PutObjectAsync(new OSS.Models.PutObjectRequest()
{
    Bucket = bucket,    // ターゲットバケット名
    Key = key,          // バケット内のオブジェクトの一意のキー
    Body = bodyStream   // アップロードするコンテンツストリーム (この場合はメモリ内の文字列データ)
});

// アップロード結果を表示します
Console.WriteLine("PutObject done");  // 操作が完了したことを示します
Console.WriteLine($"StatusCode: {result.StatusCode}");  // HTTP ステータスコード
Console.WriteLine($"RequestId: {result.RequestId}");  // RequestId。Alibaba Cloud によるトラブルシューティングに使用されます
Console.WriteLine("Response Headers:");  // 応答ヘッダー情報
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value));  // すべての応答ヘッダーを走査して出力します

リファレンス

単純なアップロードの完全なサンプルコードについては、「putObject.cs」をご参照ください。