ASP.NET 2.0のHtmlInputFileコントロール使用小結
本稿では、ASPについて簡単にまとめる.NET 2.0のHtmlInputFileコントロールの使用要点を示し、典型的なASPXページの例を示します.
HtmlInputFileは、あるブラウザからWebサーバにファイルをアップロードするHTMLツールです.①HtmlInputFileコントロールを活用するには、まずサーバフォームのEntypeプロパティがmultipart/form-dataに設定されていることを確認します.
注意:ASP.NET 2.0では、コントロールのタグを生成する前に、適切なEntypeプロパティが自動的に設定されます.
実際には、HTMLを生成する方法は特定のブラウザに関連していますが、通常はテキストボックスとブラウズボタンで構成されています.ユーザーはローカルマシンからファイルを選択し、ボタンをクリックしてページをサーバに送信します.このとき,ブラウザは選択したファイルをサーバにアップロードし,下図のようにする.
注意ASP.NETの前に、multipart/form-dataコミットを処理するために、バックグラウンドでサーバ側プロセス、すなわちPosting Acceptorを実行する必要があります.ASP.NETはASPを通過するため、Posting Acceptorを必要としません.NET実行ライブラリで実装されています.
②サーバ上で、ファイルはHttpPostedFileタイプのオブジェクトに配置され、処理されるまで(例えば、ディスクやデータベースに保存される)放置されます.HttpPostedFileオブジェクトには、各ファイルに関する情報を取得し、ファイルを読み取り、保存するためのいくつかの属性と方法があります.次のコードは、送信されたファイルをディスク上の特定のフォルダに保存する方法を示しています.
③HttpPostedFileオブジェクトのInputStreamプロパティを使用して、永続性または処理前に送信されたデータを読み込むこともできます.HtmlInputFileコントロールでは、サーバにアップロードされるファイルのタイプを制限することもできます.このためには、カンマで区切られたMINEタイプのリストを使用してAcceptプロパティを設定するだけです.
④SaveAsメソッドを使用する場合は、必ず出力ファイルへのフルパスを指定してください.相対パスを提供している場合は、ASP.NETはファイルをシステムディレクトリの下に入れようとした.これにより、「Access denied」エラーが発生します.また、必ずASP.NETが使用するアカウントは、ファイルを格納するディレクトリへの書き込み権限を提供します.
⑤また、ASP.NETはアップロードされたデータ量に対していくつかの制御を実施する.プロファイルwebを通じてconfigのセクションのMaxRequestLengthプロパティは、最大許容ファイルサイズを設定します.ファイルが所定のサイズ(デフォルトは4 MB)を超えると、ブラウザでエラーが発生します.大規模なファイルをアップロードすると、システムのメモリが消費されすぎるため、別の実行時エラーが発生します.そのため、この時は特別な措置を取らなければならない.
最後に、本明細書に添付する例のページは、Windows XP+.Net 2.0+Visual Web Developer 2005 Express Edition環境でのデバッグに合格しました.
HtmlInputFileは、あるブラウザからWebサーバにファイルをアップロードするHTMLツールです.①HtmlInputFileコントロールを活用するには、まずサーバフォームのEntypeプロパティがmultipart/form-dataに設定されていることを確認します.
注意:ASP.NET 2.0では、コントロールのタグを生成する前に、適切なEntypeプロパティが自動的に設定されます.
実際には、HTMLを生成する方法は特定のブラウザに関連していますが、通常はテキストボックスとブラウズボタンで構成されています.ユーザーはローカルマシンからファイルを選択し、ボタンをクリックしてページをサーバに送信します.このとき,ブラウザは選択したファイルをサーバにアップロードし,下図のようにする.
注意ASP.NETの前に、multipart/form-dataコミットを処理するために、バックグラウンドでサーバ側プロセス、すなわちPosting Acceptorを実行する必要があります.ASP.NETはASPを通過するため、Posting Acceptorを必要としません.NET実行ライブラリで実装されています.
②サーバ上で、ファイルはHttpPostedFileタイプのオブジェクトに配置され、処理されるまで(例えば、ディスクやデータベースに保存される)放置されます.HttpPostedFileオブジェクトには、各ファイルに関する情報を取得し、ファイルを読み取り、保存するためのいくつかの属性と方法があります.次のコードは、送信されたファイルをディスク上の特定のフォルダに保存する方法を示しています.
@ Page language="C#"
%>
@ Import Namespace="System.IO"
%>
<
script
runat
="server"
>
void UploadButton_Click(object sender, EventArgs e)
{
// 。
// *** ***
string savePath = UploadPath.Text;
if (!Directory.Exists(savePath))
{
Response.Write(String.Format("アップロードファイルパスが しません:{0}
",
savePath));
Response.End();
}
// ,
// FileUpload
if (FileUpload1.HasFile)
{
//
string fileName = FileUpload1.FileName;
//
savePath += fileName;
// SaveAs 。
// , 。
// , 。
FileUpload1.SaveAs(savePath);
//
UploadStatusLabel.Text = " : " + savePath + "";
}
else
{
// .
UploadStatusLabel.Text = " 。";
}
}
script
>
<
html
>
<
head
runat
="server"
>
<
title
>
ASP.NET 2.0 HtmlInputFile
title
>
head
>
<
body
>
<
form
runat
="server"
>
<
h4
style
="text-align: center"
>
<
span
style
="font-size: 24pt; color: #000099"
>
:
span
>
h4
>
<
b
>
b
><
strong
>
strong
><
br
/>
<
asp:textbox
id
="UploadPath"
runat
="server"
text
="c:\temp\"
/>
<
hr
/>
<
b
>
b
><
br
/>
<
asp:fileupload
id
="FileUpload1"
runat
="server"
/>
<
br
><
br
>
<
asp:button
id
="UploadButton"
text
=" "
onclick
="UploadButton_Click"
runat
="server"
>
asp:button
>
<
hr
/>
<
asp:label
id
="UploadStatusLabel"
runat
="server"
>
asp:label
>
form
>
body
>
html
>
③HttpPostedFileオブジェクトのInputStreamプロパティを使用して、永続性または処理前に送信されたデータを読み込むこともできます.HtmlInputFileコントロールでは、サーバにアップロードされるファイルのタイプを制限することもできます.このためには、カンマで区切られたMINEタイプのリストを使用してAcceptプロパティを設定するだけです.
④SaveAsメソッドを使用する場合は、必ず出力ファイルへのフルパスを指定してください.相対パスを提供している場合は、ASP.NETはファイルをシステムディレクトリの下に入れようとした.これにより、「Access denied」エラーが発生します.また、必ずASP.NETが使用するアカウントは、ファイルを格納するディレクトリへの書き込み権限を提供します.
⑤また、ASP.NETはアップロードされたデータ量に対していくつかの制御を実施する.プロファイルwebを通じてconfigのセクションのMaxRequestLengthプロパティは、最大許容ファイルサイズを設定します.ファイルが所定のサイズ(デフォルトは4 MB)を超えると、ブラウザでエラーが発生します.大規模なファイルをアップロードすると、システムのメモリが消費されすぎるため、別の実行時エラーが発生します.そのため、この時は特別な措置を取らなければならない.
最後に、本明細書に添付する例のページは、Windows XP+.Net 2.0+Visual Web Developer 2005 Express Edition環境でのデバッグに合格しました.