このトピックでは、簡易ダウンロードメソッドを使用してバケットからローカルメモリにオブジェクトをダウンロードする方法について説明します。このメソッドは、オブジェクトを迅速にダウンロードするのに最適です。
重要
このトピックのサンプルコードでは、中国 (杭州) リージョン (cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用する必要があります。OSS がサポートするリージョンとエンドポイント間のマッピングの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを介して操作権限を付与する必要があります。
API | アクション | 定義 |
GetObject |
| オブジェクトをダウンロードします。 |
| オブジェクトをダウンロードする際に、versionId を通じてオブジェクトのバージョンを指定する場合、この権限が必要です。 | |
| オブジェクトをダウンロードする際、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、この権限が必要です。 |
サンプルコード
次のサンプルコードは、バケットからローカルメモリにオブジェクトをダウンロードする方法を示しています。
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);
// GetObjectAsync メソッドを呼び出します。デフォルトでは、オブジェクトはストリーミングモードで取得されます。この場合、応答ヘッダーのみがダウンロードされ、コンテンツはストリームとして返されます。
var result = await client.GetObjectAsync(new OSS.Models.GetObjectRequest()
{
Bucket = bucket,
Key = key,
});
// すべてのコンテンツを一度にメモリに読み込むには、この再読み込みメソッドを使用できます。
//var result = await client.GetObjectAsync(new OSS.Models.GetObjectRequest() {
// Bucket = bucket,
// Key = key,
//},System.Net.Http.HttpCompletionOption.ResponseContentRead);
// 応答のコンテンツストリームを取得します。
using var body = result.Body;
// データを読み取ります。
var reader = new StreamReader(body!);
// ストリームからすべてのコンテンツを文字列として読み取ります (コンテンツはメモリに読み込まれます)。
var data = reader.ReadToEnd();
// 結果情報を出力します。
Console.WriteLine("GetObject 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)); // すべての応答ヘッダーを走査して出力します。参照
簡易ダウンロードメソッドを使用してオブジェクトをローカルメモリにダウンロードする方法を示す完全なサンプルコードについては、「GetObject.cs」をご参照ください。