前回に引き続き、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(); }
まとめ
相変わらず面倒ですね。