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

Object Storage Service:C# 言語を使用したOSSでの署名ヘッダーのアップロード例

最終更新日:Nov 10, 2025

概要

OSS SDKは、署名機能とアップロードおよびダウンロード機能を統合するSDKを提供します。 ただし、実際には、署名を考慮してオブジェクトをアップロードおよびダウンロードするには、APIを使用する必要があります。 このトピックでは、PutObject APIを例として、C# でオブジェクトをアップロードおよびダウンロードする方法について説明します。

説明

注: OSS SDKの使用を推奨します。 このトピックでは、署名を使用してオブジェクトをアップロードする方法の例を示します。 実際に使用するビジネスコードを変更できます。

詳細

C# でPutObject APIを使用するためのサンプルコードは次のとおりです。

説明

注: 次の例は、Visual Studio 2017ツールおよびNET Framework4.0パッケージに実装されています。

システムを使用して;
System.Security.Cryptographyを使用する。System.Textを使用する。System.Netを使用する。System.IOを使用する。システムを使用して。反射;


名前空間Aliyun.OSS.Samples
{
    class Program
    {



        // あなたのAccessKey
        パブリック静的文字列AccessKey = "xx";
        // AccessKeySecret
        パブリック静的文字列AccessKeySecret = "xx";
        // バケットのエンドポイント
        パブリック静的文字列Endpoint = "oss-cn-hangzhou.aliyuncs.com";
        パブリック静的文字列BucketName = "xx";
        パブリック静的文字列objectName = "mytest/1.txt";
        パブリック静的文字列HmacSha1Sign (文字列シークレット、文字列strOrgData)
        {
            var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(secret));
            var dataBuffer = Encoding.UTF8.GetBytes(strOrgData);
            var hashBytes = hmacsha1.ComputeHash(dataBuffer);
            リターンConvert.ToBase64String(hashBytes);
        }


        public static string HttpRequest(string url, string data, string sign, string contentType, string time1)
        {


            byte[] datas = System.Text.Encoding.GetEncoding("UTF-8").GetBytes (データ);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            リクエストメソッド="PUT";
            request.Timeout = 150000;
            request.Headers.Add("Authorization", "OSS" + AccessKey + ":" + sign);
            CallPrivateMethod (リクエスト、"SetSpecialHeaders" 、"Date" 、time1);
            request.ContentType = contentType;
            ストリームrequestStream = null;
            文字列responseStr = null;
            try
            {
                if (datas != null)
                {
                    request.ContentLength = datas.Length;
                    requestStream = request.GetRequestStream();
                    requestStream.Write(datas, 0, datas.Length);
                    requestStream.Close();
                }
                else
                {
                    request.ContentLength = 0;
                }
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                responseStr = response.Headers.GetValues("x-oss-request-id")[0];
                // responseStr = sr.ReadToEnd();
            }
            catch (例外)
            {
                Console.WriteLine("エラー");
            }
            finally
            {
                request = null;
                requestStream = null;
            }
            リターンresponseStr;
        }


        パブリック静的文字列ToGMTString()
        {
            return DateTime.Now.ToUniversalTime().ToString("r");
        }
        public static void CallPrivateMethod (オブジェクトインスタンス、文字列名、params object[] param)
        {
            BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;
            Type type = instance.GetType();
            MethodInfoメソッド=type.GetMethod(name, flag);
            メソッドを呼び出す (インスタンス、param);
        }


        static void Main(string[] args)
        {


            string varb = "PUT";
            string content_type = "application/json";
            string timeGmt = ToGMTString();
            string str = varb + "\n\n" + content_type + "\n" + timeGmt + "\n/" + BucketName + "/" + objectName;
            文字列署名=HmacSha1Sign(AccessKeySecret、str);
            string url = "http://" + BucketName + "" 。+ エンドポイント + "/" + objectName;
            string data = "{ \" key\":\" this is a oss's test\"}";
            string result = HttpRequest(url、data、signature、content_type、timeGmt);
            Console.WriteLine("requestId: " + 結果);




        }
    }
}

ドキュメント

OSS SDKの使用方法の詳細については、「OSSヘッダーへの署名の追加」をご参照ください。

スコープ

  • OSS