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

Object Storage Service:ファイルのダウンロード (C# SDK V1)

最終更新日:Nov 30, 2025

デフォルトでは、GetObject 操作は、バージョン管理が有効なバケットからオブジェクトの現在のバージョンのみを返します。

背景情報

バケットに対して GetObject 操作を呼び出すと、次の 3 つのケースのいずれかが適用されます:

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

  • クエリパラメーターでオブジェクトの versionId を指定すると、指定されたバージョンが返されます。versionId を "null" に設定すると、versionId が null のオブジェクトバージョンが返されます。

  • versionId を指定して削除マーカーを取得しようとすると、OSS は 405 Method Not Allowed を返します。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、リージョンとエンドポイントをご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、初期化 (C# SDK V1) をご参照ください。

権限

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

API

アクション

定義

GetObject

oss:GetObject

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

oss:GetObjectVersion

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

kms:Decrypt

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

サンプルコード

次のコードは、オブジェクトをダウンロードする方法の例を示しています。

using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;

namespace Samples
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
            var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // バケット名を指定します。例:examplebucket
            var bucketName = "examplebucket";
            // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt
            var objectName = "exampledir/exampleobject.txt";
            // ローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt
            var downloadFilename = "D:\\localpath\\examplefile.txt";
            var versionid = "yourArchiveObjectVersionid";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
            const string region = "cn-hangzhou";
            
            // ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
            var conf = new ClientConfiguration();
            
            // 署名バージョンを V4 に設定します。
            conf.SignatureVersion = SignatureVersion.V4;
            
            // OssClient インスタンスを作成します。
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
            client.SetRegion(region);
            try
            {
                // ファイルをストリームにダウンロードします。OssObject には、ファイルが格納されているバケット、ファイル名、メタデータ、入力ストリームなど、ファイルに関するさまざまな情報が含まれています。
                var request = new GetObjectRequest(bucketName, objectName)
                {
                    // オブジェクトのバージョン ID を指定します。
                    VersionId = versionid
                };
                var obj = client.GetObject(request);
                using (var requestStream = obj.Content)
                {
                    byte[] buf = new byte[1024];
                    var fs = File.Open(downloadFilename, FileMode.OpenOrCreate);
                    var len = 0;
                    // 入力ストリームを使用して、ファイルの内容をファイルまたはメモリに読み取ります。
                    while ((len = requestStream.Read(buf, 0, 1024)) != 0)
                    {
                        fs.Write(buf, 0, len);
                    }
                    fs.Close();
                }
                Console.WriteLine("Get object succeeded, vesionid:{0}", versionid);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Get object failed. {0}", ex.Message);
            }
        }
    }
}

関連ドキュメント

ファイルのダウンロードに使用される API 操作の詳細については、GetObject をご参照ください。