6. コントローラー(Controllers/HomeController.cs)を修正する
既定で作成されたコントローラーのControllers/HomeController.csを、リスト2のように修正します。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; // 使用するWindows Azureマネージライブラリ *1 using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.ServiceRuntime; using Microsoft.WindowsAzure.StorageClient; namespace MvcWebRole1.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "ASP.NET MVC へようこそ"; return View(); } [AcceptVerbs(HttpVerbs.Post)] // HTTP POSTメソッドの指定 *2 public ActionResult Index(String title, HttpPostedFileBase file1) // *3 { // ファイルが未選択 or 画像ファイルではない場合は、入力ページを再表示する *4 if (file1 == null || !file1.ContentType.StartsWith("image/")) return View(); // ストレージアカウントの取得 *5 string connectionString = RoleEnvironment.GetConfigurationSettingValue("DataConnectionString"); var storageAccount = CloudStorageAccount.Parse(connectionString); // ブロブクライアントの作成 *6 var blobClient = storageAccount.CreateCloudBlobClient(); // コンテナの作成(存在しなければ) *7 var container = blobClient.GetContainerReference("images"); container.CreateIfNotExist(); // コンテナの公開アクセスの許可レベルを、コンテナに設定 *8 var permissions = container.GetPermissions(); permissions.PublicAccess = BlobContainerPublicAccessType.Container; container.SetPermissions(permissions); // ブロブ名の作成 *9 string blobName = Guid.NewGuid().ToString(); // 画像ファイルのアップロード *10 var blob = container.GetBlobReference(blobName); blob.Metadata["title"] = HttpUtility.UrlEncode(title); // タイトルをメタデータとして設定 blob.UploadFromStream(file1.InputStream); // ViewDataにデータを格納 *11 ViewData["uri"] = blob.Uri; ViewData["fileName"] = file1.FileName; ViewData["title"] = HttpUtility.UrlDecode(blob.Metadata["title"]); // 結果ページの表示 *12 return View("Result"); } public ActionResult About() { return View(); } } }
まず、使用するWindows Azureマネージライブラリの3つのusingディレクティブを追加します(*1)。
次に、ビュー(Views/Home/Index.aspx)からのHTTP POSTメソッドを受け取るための、アクションメソッドを追加します(*2、*3)。アップロードファイルを受け取るためには、アクションメソッドの引数に、HttpPostedFileBaseクラスを指定する必要があります(*3)。
続く部分では、アップロードファイルのチェックを行っています。アップロードファイルが未選択または画像ファイルではない場合は、入力ページを再表示します(*4)。
*5~*10のコードでは、Windows Azureストレージのブロブに画像ファイルを登録しています。Windows Azureストレージを操作する同じようなコードについて、本連載の第2回と第3回で詳しく解説していますので、ここでは説明を省略させていただきます。コメントを見ると、大体の処理の流れを理解できるでしょう。
ブロブストレージに画像データを追加した後、結果ページのビューにデータを受け渡すために、ViewDataプロパティに登録したブロブのURIやメタデータの内容(タイトル)、オリジナルファイル名を格納します(*11)。
最後に、結果ページのビュー(Views/Home/Result.aspx)を表示します(*12)。このビューは、次の手順7.で作成します。