.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コントロールを含む、ファイル・アップロードのためのフォームの記述例だ。

<form id="Form1" method="post" runat="server" enctype="multipart/form-data">
  <P>送信するファイルを指定して、[送信]ボタンを押してください。</P>
  <P><INPUT type="file" id="File1" runat="server"></P>
  <P>
    <asp:Button id="Button1" runat="server" Text="送信" />
  </P>
</form>
サーバ・コントロール化した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イベント・ハンドラを記述すると次のようになる。

private void Button1_Click(object sender, System.EventArgs e)
{
  HttpPostedFile posted = File1.PostedFile;

  if (posted.FileName != "")
  {
    posted.SaveAs(
      "c:\\UploadedFiles\\"
      + System.IO.Path.GetFileName(posted.FileName));
  }
}
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim posted As HttpPostedFile = File1.PostedFile

  If Not posted.FileName = "" Then
    posted.SaveAs( _
       "c:\UploadedFiles\" _
       & System.IO.Path.GetFileName(posted.FileName))
  End If
End Sub
アップロードされたファイルを保存するClickイベント・ハンドラの記述例(上:C#、下:VB.NET)

 ファイル名が入力されずにこのメソッドが呼ばれた場合にもPostedFileプロパティがnull(VB.NETの場合にはNothing)にならない点には注意が必要だ。ここでは入力されたファイル名を示すFileNameプロパティが空文字かどうかにより、それをチェックしている。End of Article

カテゴリ:Webフォーム 処理対象:ファイル・アップロード
使用ライブラリ:HttpFileCollectionクラス(System.Web名前空間)
使用ライブラリ:HtmlInputFileクラス(System.Web.UI.HtmlControls名前空間)
関連TIPS:[ASP.NET]ブラウザからファイルをアップロードできるようにするには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]ブラウザからファイルをアップロードできるようにするには?
[ASP.NET]アプリケーションからASP.NETサイトにファイルをアップロードするには?
ASP.NETでボタンのクリック時に確認メッセージを表示するには?
[ASP.NET AJAX]AsyncFileUploadコントロールでファイルを非同期にアップロードするには?
[ASP.NET]TreeViewコントロールでツリー・メニューを作成するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間