Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

REST API でBlob 操作 Upload編

前回に引き続き、REST APIでBlob操作です。今回はファイルアップロードします。

API

APIで言うところのPUT Blob操作を行います。
- http://msdn.microsoft.com/en-us/library/dd179451.aspx

GETと同じくリクエストヘッダを付加しなければなりませんが、PUTでは必須ヘッダが増えています。詳細は、先ほどのURLを参照していただくとして、以下。Blob Typeと、Content-Lenghtが増えています。サンプルソースでは、Content-Typeを付けていますが、任意です。

Request Header Description
x-ms-blob-type 必須。BlockBlob または、PageBlob
Content-Length 必須。

アップロード

署名部分は前回と同じなので省略。異なる点は、

  • 必須ヘッダを付ける部分
  • req.GetRequestStream() で、Request Bodyを付けている点

でしょうか。

        static void Main(string[] args)
        {
            string url = "http://zircon.blob.core.windows.net/hoge/upload.txt";
            var req = (HttpWebRequest)WebRequest.Create(url);

            string content = "Windows Azure REST API Upload Sample.";
            req.Headers.Add("x-ms-version", "2009-09-19");
            req.Headers.Add("x-ms-date" , DateTime.UtcNow.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
            req.Headers.Add("x-ms-blob-type", "BlockBlob");
            req.Method = "PUT";
            req.ContentType = "text/plain";
            req.ContentLength = content.Length;
            string authHeader = SignRequest(req);
            req.Headers.Add("Authorization", "SharedKeyLite " + AccountName + ":" + authHeader);
            try
            {
                using (var sw = new StreamWriter(req.GetRequestStream()))
                {
                    sw.Write(content);
                }
                var res = req.GetResponse();
                var con = new System.IO.StreamReader(res.GetResponseStream()).ReadToEnd();
                Console.WriteLine(con);
            }
            catch (WebException e)
            {
                Console.WriteLine(e);
                Console.WriteLine(((HttpWebResponse)e.Response).StatusDescription);

            }
            Console.Write("Press ENTER to exit.");
            Console.ReadLine();

        }

CloudXplorerで参照すると、Upload.txtが出来ているのが確認できます。

あと、Fiddlerでのキャプチャの様子。

まとめ

相変わらず面倒ですね。