このセクションでは、ASP.NET でファイルを Web ページにアップロードするために使用される 2 つの方法について説明します。
ASP.NET には、ユーザーが Web サーバーにファイルをアップロードできるようにする 2 つのコントロールが含まれています。サーバーがアップロードされたファイル データを受け入れると、アプリケーションはそれを保存、検査、または無視できます。次のコントロールでは、ファイルのアップロードを許可します。
HtmlInputFile - HTML サーバー コントロール
FileUpload - ASP.NET Web コントロール
どちらのコントロールでもファイルのアップロードが可能ですが、FileUpload コントロールではエンコード形式が自動的に設定されますが、HtmlInputFile コントロールでは自動的に設定されません。
このチュートリアルでは、FileUpload コントロールを使用します。このコントロールを使用すると、ユーザーはアップロードする選択したファイルをプレビューできるようになり、プレビュー ボタンとファイル名を入力できるテキスト ボックスが表示されます。
ユーザーがテキスト ボックスにファイル名を入力するか、ファイルをプレビューすると、FileUpload コントロールの SaveAs メソッドによってファイルがハード ディスクに保存されます。
FileUpload の基本的な構文は次のとおりです。
<asp:FileUpload ID= "Uploader" runat = "server" />
FileUpload クラスは WebControl クラスから派生し、そのすべての要素を継承します。FileUpload クラスには次の読み取り専用プロパティがあります。
財産 | 説明する |
---|---|
ファイルバイト | アップロードするファイルのバイトコードのセットを返します。 |
ファイルコンテンツ | アップロードするファイルのストリームオブジェクトを返します。 |
ファイル名 | アップロードされるファイルの名前を返します |
ファイルあり | コントロールにアップロードするファイルがあるかどうかを判断する |
投稿ファイル | アップロードされたファイルへの参照を返します |
パブリッシュされたファイルは、HttpPostedFile 形式のオブジェクトにカプセル化され、FileUpload クラスの PostedFile プロパティを通じてアクセスできます。
HttpPostedFile クラスには、次の一般的に使用されるプロパティがあります。
財産 | 説明する |
---|---|
コンテンツの長さ | アップロードされたファイルのバイトサイズを返します。 |
コンテンツタイプ | アップロードされたファイルの MIME タイプを返します。 |
ファイル名 | ファイルのフルネームを返します |
入力ストリーム | アップロードするファイルのストリームオブジェクトを返します。 |
次の例は、FileUpload コントロールとそのプロパティを示しています。このフォームには、FileUpload コントロール、保存ボタン、実際のファイル名、タイプ、長さを含むラベル コントロールがあります。
デザイン モードでは、テーブルは次のようになります。
関連するファイル コードを以下に示します。
<body> <form id="form1" runat="server"> <div> <h3> File Upload:</h3> <br /> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /><br /> <asp:Button ID="btnsave" runat="server" onclick="btnsave_Click" Text="Save" /> <br /><br /> <asp:Label ID="lblmessage" runat="server" /> </div> </form></body>
保存ボタンのコードは以下のとおりです。
protected void btnsave_Click(object sender, EventArgs e){ StringBuilder sb = new StringBuilder(); if (FileUpload1.HasFile) { try { sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName); //saving the file FileUpload1.SaveAs("<c:\SaveDirectory>" + FileUpload1.FileName); //Showing the file information sb.AppendFormat("<br/> Save As: {0}", FileUpload1.PostedFile.FileName); sb.AppendFormat("<br/> File type: {0}", FileUpload1.PostedFile.ContentType); sb.AppendFormat("<br/> File length: {0}", FileUpload1.PostedFile.ContentLength); sb.AppendFormat("<br/> File name: {0}", FileUpload1.PostedFile.FileName); }catch (Exception ex) { sb.Append("<br/> Error <br/>"); sb.AppendFormat("Unable to save file <br/> {0}", ex.Message); } } else { lblmessage.Text = sb.ToString(); }}
次の問題に注意してください。
StringBuilder クラスは System.IO 名前空間から生成されるため、含める必要があります。
try 領域と catch 領域は、エラーをキャッチし、エラー メッセージを表示するために使用されます。