.NET TIPS [ASP.NET]アップロードされたファイルをPostedFileプロパティにより取得するには?デジタルアドバンテージ 遠藤 孝信2005/07/08 |
|
|
「TIPS:[ASP.NET]ブラウザからファイルをアップロードできるようにするには?」では、File Fieldコントロール(type="file"属性を付けた<INPUT>タグ)に名前を付け、その名前により、アップロードされたファイルをページのRequestプロパティのFilesプロパティから取り出している。
しかし、HTMLコントロールであるFile Fieldコントロールをサーバ・コントロールにすることにより、そのPostedFileプロパティから、アップロードされたファイルを操作することもできる。本稿ではこの方法について解説する。
File Fieldコントロールのサーバ・コントロール化
File Fieldコントロールをサーバ・コントロールに変換するには、Visual Studio .NETではWebフォームのデザイン画面上で、配置したFile Fieldコントロールを右クリックし、メニューから[サーバー コントロールとして実行]を選択する。
この操作により、File Fieldコントロールを示す<INPUT>タグにid属性とrunat="server"属性が追加される(単にこれらの属性をエディタ上で追加するだけでもよい)。
<INPUT type="file" id="File1" runat="server">
なお、前掲のTIPSで必要だったname属性によるコントロール名の設定は不要である(name属性を記述しても、id属性の値がコントロールの名前として使われるようなので注意してほしい)。
以下は、サーバ・コントロール化したFile Fieldコントロールを含む、ファイル・アップロードのためのフォームの記述例だ。
|
|
サーバ・コントロール化したFile Fieldコントロールを含んだフォームの記述例 |
ちなみに、runat="server"属性が追加されたFile Fieldコントロールがフォームに含まれており、<FORM>タグにenctype属性が指定されていないときには、自動的にenctype="multipart/form-data"属性が設定されるようなので、この場合にはenctype属性の追加は省略することも可能である。
PostedFileプロパティによるアップロード・ファイルの取得
コントロールがサーバ・コントロール(runat="server"属性を持つコントロール)である場合、フォームが呼び出されるときには、そのコントロールに対応したインスタンスがサーバ上で生成され、プログラム・コードから操作することができるようになる。
File Fieldコントロールの場合は、HtmlInputFileクラス(System.Web.UI.HtmlControls名前空間)のインスタンスがページの実行時に作成される。そしてそのインスタンスには、id属性で指定した値(上記の場合には「File1」)の名前を持つ変数としてアクセスできる。
このHtmlInputFileオブジェクトからは、アップロードされたファイルをPostedFileプロパティにより取得できる。このプロパティにはHttpPostedFileクラス(System.Web名前空間)のオブジェクトがセットされている。
アップロードされたファイルをWebサーバ上に保存する、前掲のTIPSと同様のButtonコントロールのClickイベント・ハンドラを記述すると次のようになる。
|
||
アップロードされたファイルを保存するClickイベント・ハンドラの記述例(上:C#、下:VB.NET) |
ファイル名が入力されずにこのメソッドが呼ばれた場合にもPostedFileプロパティがnull(VB.NETの場合にはNothing)にならない点には注意が必要だ。ここでは入力されたファイル名を示すFileNameプロパティが空文字かどうかにより、それをチェックしている。
カテゴリ:Webフォーム 処理対象:ファイル・アップロード 使用ライブラリ:HttpFileCollectionクラス(System.Web名前空間) 使用ライブラリ:HtmlInputFileクラス(System.Web.UI.HtmlControls名前空間) 関連TIPS:[ASP.NET]ブラウザからファイルをアップロードできるようにするには? |
「.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|