|
.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」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




