.NET TIPS [ASP.NET MVC]データベースから取り出したバイナリ・データを出力するには?[3.5、C#、VB]山田 祥寛2009/11/12 |
|
|
「TIPS:[ASP.NET MVC]アップロードしたファイルをデータベースに登録するには?」では、クライアント上の任意のファイルをサーバ側のデータベースに登録する方法について、紹介した。
本稿では、その続編として、同TIPSで登録した画像ファイルをアクション・メソッド経由で出力する方法について紹介する。
次の画面は本稿で作成するサンプル・プログラムを実行した結果だ。
画像ファイルを選択して[送信]ボタンをクリック |
選択ボックスで指定されたファイルの内容をダウンロード(画像ビューアが起動) |
なお、本稿のサンプルを利用するに当たっては、前掲のTIPSで紹介したPhotoテーブルをデータベースに用意し、かつ、テーブルがEntity Dataモデルに登録されている必要がある。
次のコードは、データベースから画像ファイルを取得、ダウンロードするUpload/PhotoViewアクションのコードと、画像選択のためのビュー・スクリプトである。
|
||
データベースから画像ファイルを取得&ダウンロードするUpload/PhotoViewアクション(上:UploadController.cs/下:UploadController.vb) |
|
||
画像選択のためのビュー・スクリプト(Upload/PhotoView.aspx。上:C#、下:VB) |
コードの詳細はリスト内のコメントを参照していただくとして、ここでは以下の点に注目してほしい。
(1)バイナリ・データを出力するのは、Fileメソッドの役割
アクション・メソッドからバイナリ・データを出力するには、ヘルパー・メソッドであるFileメソッドを使用する。Fileメソッドの構文は、以下のとおりである。
|
|
[構文]Fileメソッド | |
contents:ダウンロードするデータ本体。 type:コンテンツ・タイプ。 name:ダウンロード時のファイル名。 |
ここではLINQ to Entities経由で取り出した画像情報(Photoエンティティ)から、それぞれ該当するプロパティを読み込み、Fileメソッドに割り当てているわけだ。
前述のTIPSでも解説したように、データベースでVARBINARY型として定義されたフィールドは、エンティティではバイト配列のプロパティとして割り当てられる。このため、LINQ to Entitiesで取得したVARBINARY型の値は、そのままFileメソッドの引数としてセットできる。
(2)選択ボックスを生成する方法
もう1つ、ここではPhotoテーブルの内容を基に、動的に選択ボックスを生成している個所に注目してほしい。
選択ボックスのオプション・リストを表すのは、SelectListクラス(System.Web.Mvc名前空間)の役割だ。
|
|
[構文]SelectListコンストラクタ | |
items:選択オプション。 value:値を表すプロパティの名前。 text:テキストを表すプロパティの名前。 selected:デフォルトで選択された値。 |
ここではPhotoテーブルからすべての画像情報を取得し、その画像コード(Idプロパティ)を選択ボックスの値として、ファイル名(Nameプロパティ)を表示テキストとして、それぞれ割り当てている。
SelectListオブジェクトを用意できてしまえば、あとはこれをビュー変数にセットするだけだ。この際、ビュー変数のキー名は選択ボックスの名前と同名に設定しておく必要がある。
これによって、ビュー・ヘルパーであるDropDownListメソッドは、ビュー変数から自動的に対応するSelectListオブジェクトを取り出し、選択ボックスを生成できるようになる。
以上が理解できたら、さっそく、サンプル・プログラムを実行してみよう。冒頭のような実行結果が得られれば、サンプルは正しく動作している。
利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:ASP.NET MVC 関連TIPS:[ASP.NET MVC]アップロードしたファイルをデータベースに登録するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|