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

Object Storage Service:C# を使用したファイルのダウンロード

最終更新日:Jul 02, 2025

このトピックでは、C# 用 OSS SDK を使用してバージョン管理されたバケットからオブジェクトをダウンロードする方法について説明します。

使用上の注意

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

権限

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

API

アクション

定義

GetObject

oss:GetObject

オブジェクトをダウンロードします。

oss:GetObjectVersion

オブジェクトをダウンロードするときに、versionId を介してオブジェクトバージョンを指定した場合、この権限が必要です。

kms:Decrypt

オブジェクトをダウンロードするときに、オブジェクトメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、この権限が必要です。

説明

[GetObject] 操作を呼び出してバケット内のオブジェクトをダウンロードする場合、次の 3 つのシナリオが適用されます。

  • オブジェクトの現在のバージョンが削除マーカーの場合、Object Storage Service (OSS) は 404 Not Found を返します。

  • リクエストでオブジェクトのバージョン ID が指定されている場合、OSS は指定されたバージョンのオブジェクトを返します。リクエストでバージョン ID が null に設定されている場合、OSS は ID が null のバージョンを返します。

  • リクエストで指定されたバージョン ID が削除マーカーのバージョン ID である場合、OSS は 405 Method Not Allowed を返します。

サンプルコード

以下は、オブジェクトをダウンロードするためのサンプルコードです。

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 name";  // 必須。ダウンロードするオブジェクトの名前を指定します。形式: フォルダ/オブジェクト名。
var filePath = "your file path";  // 必須。ダウンロードしたファイルをローカルディスクに保存するパスを指定します。
var versionId = "your object versionId";  // 必須。ダウンロードするオブジェクトの x-oss-version-id を指定します。


// OSS SDK のデフォルト構成を読み込みます。これにより、環境変数から資格情報 (AccessKey など) が自動的に読み取られます。
var cfg = OSS.Configuration.LoadDefault();
// 環境変数を明示的に設定して、認証用の資格情報を取得します (形式: 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); 

// GetObjectToFileAsync メソッドを呼び出して、OSS オブジェクトをストリーミングモードでローカルディスクに直接ダウンロードし、大きなファイルの過剰なメモリ使用を回避します。
var result = await client.GetObjectToFileAsync(new OSS.Models.GetObjectRequest()
{
    Bucket = bucket,
    Key = key,
    VersionId = versionId,
}, filePath);

// アップロード結果を出力します。
Console.WriteLine("GetObjectToFile 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));  // すべてのレスポンスヘッダーをトラバースして出力します。