.NET TIPS [ASP.NET MVC]ASP.NET MVCでアップロードしたファイルをデータベースに登録するには?[3.5、C#、VB]山田 祥寛2009/10/29 |
|
|
「TIPS:[ASP.NET MVC]ファイルのアップロードを行うには?」では、アップロードしたファイルをサーバのファイル・システム上に保存する方法について紹介した。もっとも、アップロード・ファイルをファイル・システムで管理するのは、何かと面倒な点も多い。ファイル名の重複やアクセスの管理、複数ユーザーの同時アクセスなどなど、アプリケーションで意識しなければならないポイントが多いためだ。その点、アップロード・ファイルをデータベースに格納してしまえば、このような問題の大部分は確実に(かつ簡単に)解消することができる。
そこで本稿では、ブラウザ上からアップロードしたファイルをデータベースに登録する方法について紹介することにしよう。
このサンプルを動作させるには、データベースに以下のようなPhotoテーブルを用意し、Entity Data Model(エンティティ・データ・モデル。以下EDM)にもテーブルに対応したエンティティを追加しておく必要がある。EDMの作成方法については、「連載:ASP.NET MVC入門 第2回 スキャフォールディング機能で軽々DB連携アプリケーション」で解説しているので、参考にしていただきたい。
フィールド名 | データ型 | 概要 |
Id | INT | 画像コード(主キー/自動連番) |
Name | NVARCHAR(70) | ファイル名 |
Mime | VARCHAR(50) | コンテンツ・タイプ |
Data | VARBINARY(MAX) | データ本体 |
Photoテーブルのフィールド・レイアウト |
それでは、具体的なコードを見ていくことにしよう。
|
||
アップロード処理を行うためのUpload/DbUploadアクション(上がUploadController.cs/下がUploadController.vb) |
|
||
アップロード・フォームを表すビュー・スクリプト(Upload/DbUpload.aspx。上がC#、下がVisual Basic) |
以上のサンプルの実行結果は、以下のとおりである。
本稿で作成するサンプル・アプリケーションの実行結果 |
[参照]ボタンで画像ファイルを選択し、[送信]ボタンをクリック。これにより、バイナリ・データがサーバにアップロードされ、データベースに格納される。 |
このWebページ上で画像ファイルを指定してアップロードしてみよう。以下のようにそのバイナリ・データがデータベースに登録されているのが確認できるはずである。
アップロード後、データベースの内容を確認したところ |
あらかじめ用意したPhotoテーブルにアップロード・ファイルが登録されている。 |
リストの内容を確認しても分かるように、バイナリ・データを扱うといっても、さほどのことはない。まず、バインド機能を使って、HttpPostedFileBaseオブジェクトにアップロード・ファイルを格納するところまでは、前述のTIPSで解説したままである。あとは、HttpPostedFileBaseクラス(System.Web名前空間)の内容をエンティティ(ここではPhotoクラス)の対応するプロパティに詰め替えていくだけだ。
この際、データ本体は、HttpPostedFileBase.InputStreamプロパティを介してバイト配列に格納している点に注目である。データベースでVARBINARY型として定義されたフィールドは、エンティティではバイト配列のプロパティとして割り当てられるので、変換したバイト配列は、そのままプロパティ値としてセットできる。
エンティティに必要なデータをセットし終えたら、AddObjectメソッドでコンテキスト・オブジェクト(ここではMyMvcEntities)に追加した後、SaveChangesメソッドを呼び出すことで、データベースにアップロード内容を反映できる。
EDMを介したデータの登録方法については、「.NETの新データアクセス・テクノロジ『ADO.NET Entity Framework』」で解説しているので、参考にしていただきたい。
このようにしてデータベースに登録したデータを、再びアクション・メソッドから読み込む方法については、後日「TIPS:[ASP.NET MVC]データベースから取り出したバイナリ・データを出力するには?」で紹介の予定である。
利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:ASP.NET MVC 使用ライブラリ:HttpPostedFileBaseクラス(System.Web名前空間) 関連TIPS:[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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|