この記事では、Microsoft Visual C# を使用してファイルをアップロードする方法について説明します。
元の製品バージョン: Visual C#、ASP.NET、インターネット インフォメーション サービス
元の KB 番号: 816150
はじめに
このステップ バイ ステップの記事では、ローカル ハード ディスク ドライブから Web サイトに既存のイメージ ファイルをアップロードする方法について説明します。 Input コントロールは、ローカル コンピューターからイメージをアップロードするために使用されます。 アップロード中のこのファイルは、既にアップロードされている既存のファイルを上書きしないように、サーバーに対して検証されます。 アップロードされたファイルがサーバー上に存在するかどうかが検証されます。 この記事では、フォームの EncType
属性を使用して機能を実現します。
要件
この記事では、次のトピックについて理解していることを前提としています。
- Web アプリケーション
- ASP.NET
次の一覧では、必要な推奨ソフトウェアとネットワーク インフラストラクチャの概要を示します。
- Visual C# .NET または Visual C#
- インターネット インフォメーション サービス (IIS)
ASP.NET Web フォームを作成する
Visual Studio .NET または Visual Studio を起動します。
[ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。
Note
Visual Studio で、File メニューの New をポイントし、[Web サイト] をクリック。
[ プロジェクトの種類で、 Visual C# プロジェクトをクリックします。 [ Templates で、[Web アプリケーション ASP.NET クリックします。
Note
Visual Studio で、Language の右側にある Visual C# を選択します。 [Templatesで、Web サイトASP.NET クリックします。
[ Location ボックスに次の場所を入力し、[ OK] をクリック。
http://WebServerName/ApplicationName
Note
WebServerName は、Web サーバーの名前のプレースホルダーです。 ApplicationName は、アプリケーションの名前のプレースホルダーです。
既定では、WebForm1.aspx が作成されます。
Note
Visual Studio で、Location の右側にある HTTP を選択し、「
<http://WebServerName>
」と入力します。View メニューの [
HTML ソース をクリックします。Note
Visual Studio で、View メニューの Code をクリックします。
フォーム属性を変更する
WebForm1 の HTML ウィンドウで、フォーム タグを次のように置き換えます。
<form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx">
EncType
属性は、転記されるデータの形式を指定します。 ブラウザーは、この属性を使用して、サーバーにポストされる情報をエンコードします。 このコードの action 属性は、ページが要求を処理することを指定します。 既定では、フォームのメソッド属性は post に設定され、トランザクションで大量のデータを送信できます。
Input コントロールを追加して、サーバーにアップロードするファイルを指定します
WebForm1 の HTML ウィンドウで、開始タグと終了
<form>
タグの間に次のコードを追加します。<INPUT id="oFile" type="file" runat="server" NAME="oFile">
この入力コントロールは、サーバーにアップロードするファイルを指定します。
コントロールの前にテキスト文字列を追加して、ユーザーにメッセージを表示できます。 WebForm1 の HTML ウィンドウの Input コントロールの前に次のテキストを入力します。
サーバーにアップロードするイメージ ファイルを選択します。
ボタン コントロールを追加する
WebForm1 の HTML ウィンドウで、入力コントロール コードの後に、開始タグと終了
<form>
タグの間に次のコードを追加します。<asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
この Button コントロールは、入力コントロールで指定したファイルをアップロードするために使用されます。
出力を表示する 1 つのラベルを含む Panel コントロールを作成する
WebForm1 の HTML ウィンドウでボタン コントロール コードの後に、開始タグと終了 <form>
タグの間に次のコードを追加します。
<asp:Panel ID="frmConfirmation" Visible="False" Runat="server">
<asp:Label id="lblUploadResult" Runat="server"></asp:Label>
</asp:Panel>
このコードは、ファイルのアップロードが成功したかどうかを示すメッセージを表示するために使用されます。 この出力を表示するには、1 つのラベルを含む Panel コントロールが作成されます。
Button Click イベントにファイルをアップロードする
このセクションのコードは、ローカル ファイル システムからファイルを取得し、ファイルがサーバーに既に存在するかどうかを確認してから、Web サイトにファイルをアップロードします。 このコードを追加するには、次の手順に従います。
この記事の「ボタン コントロールの追加」セクションで作成した Upload ボタンをダブルクリックして、ボタン コントロールの
Click
イベントのイベント ハンドラーを作成します。Code ウィンドウの上部に次のコードを追加します。
using System.IO;
Upload ボタンの
Click
イベント ハンドラーに次のコードを追加します。string strFileName; string strFilePath; string strFolder; strFolder = Server.MapPath("./"); // Retrieve the name of the file that is posted. strFileName = oFile.PostedFile.FileName; strFileName = Path.GetFileName(strFileName); if(oFile.Value != "") { // Create the folder if it does not exist. if(!Directory.Exists(strFolder)) { Directory.CreateDirectory(strFolder); } // Save the uploaded file to the server. strFilePath = strFolder + strFileName; if(File.Exists(strFilePath)) { lblUploadResult.Text = strFileName + " already exists on the server!"; } else { oFile.PostedFile.SaveAs(strFilePath); lblUploadResult.Text = strFileName + " has been successfully uploaded."; } } else { lblUploadResult.Text = "Click 'Browse' to select the file to upload."; } // Display the result of the upload. frmConfirmation.Visible = true;
[ファイル] メニューの [すべてを保存] をクリックします。
アップロード アクションが機能することを確認する
Debug メニューの Start をクリックして、アプリケーションをビルドして実行します。 テキスト ボックスとコマンド ボタンが表示されます。
テキスト ボックスにイメージ ファイルのパスを入力するか、[ Browse をクリックしてローカル コンピューター上のイメージ ファイルを見つけます。
アップロードをクリックして、ファイルをサーバーに送信します。 ファイルが一意の場合は、アップロードが成功したことを示すメッセージが表示されます。 ファイルがサーバーに既に存在する場合は、適切なメッセージが表示されます。 このアプリケーションからアップロードしたファイルは、ローカル ハード ディスクに
C:\inetpub\wwwroot\ApplicationName
場所に保存されます。このアプリケーションを .NET Framework で動作させるには、 FULL Control ASPNET ユーザーへのアクセスを許可します。 これを行うには、次の手順を実行します。
Windows エクスプローラーでアプリケーション フォルダーを見つけます。 パスは
C:\inetpub\wwwroot\ApplicationName
です。ApplicationName フォルダーを右クリックし、Properties をクリックします。 ApplicationName プロパティ ダイアログ ボックスが表示されます。
[セキュリティ] タブをクリックします。
追加をクリックします。 [ユーザーまたはグループの選択] ダイアログ ボックスが表示されます。
Note
Visual Studio で、 ユーザー、コンピューター、またはグループの選択 ダイアログ ボックスが表示されます。
ASPNETを選択するオブジェクト名を入力しOKクリックします。
[ApplicationName のプロパティ] ダイアログ ボックスで、Group またはユーザー名一覧で ASPNET ユーザーをクリックします。
[Allowで、Full Control チェック ボックスをオンにし、[
OK ] をクリックします。
完全なコード リスト
WebForm1.aspx
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Howto.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx"> Image file to upload to the server: <INPUT id="oFile" type="file" runat="server" NAME="oFile"> <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button> <asp:Panel ID="frmConfirmation" Visible="False" Runat="server"> <asp:Label id="lblUploadResult" Runat="server"></asp:Label> </asp:Panel> </form> </body> </HTML>
WebForm1.aspx.cs
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.IO; namespace **ApplicationName** { /// <summary> /// Summary description for WebForm1. /// </summary> public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Button btnUpload; protected System.Web.UI.WebControls.Label lblUploadResult; protected System.Web.UI.WebControls.Panel frmConfirmation; protected System.Web.UI.HtmlControls.HtmlInputFile oFile; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // CODEGEN: This call is required by the ASP.NET Web Form Designer. InitializeComponent(); base.OnInit(e); } /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void btnUpload_Click(object sender, System.EventArgs e) { string strFileName; string strFilePath; string strFolder; strFolder = Server.MapPath("./"); // Get the name of the file that is posted. strFileName = oFile.PostedFile.FileName; strFileName = Path.GetFileName(strFileName); if(oFile.Value != "") { // Create the directory if it does not exist. if(!Directory.Exists(strFolder)) { Directory.CreateDirectory(strFolder); } // Save the uploaded file to the server. strFilePath = strFolder + strFileName; if(File.Exists(strFilePath)) { lblUploadResult.Text = strFileName + " already exists on the server!"; } else { oFile.PostedFile.SaveAs(strFilePath); lblUploadResult.Text = strFileName + " has been successfully uploaded."; } } else { lblUploadResult.Text = "Click 'Browse' to select the file to upload."; } // Display the result of the upload. frmConfirmation.Visible = true; } }
Note
Visual Studio で生成されるコードは、Visual Studio .NET で生成されたコードとは異なります。
トラブルシューティング
- ランタイムをインストールしたパスの下にある CONFIG フォルダー内のコンピューターにある Machine.config ファイルを開きます。
- Machine.config ファイルの
<processModel>
セクションを見つけ、user
とpassword
属性を、W3wp.exeまたはAspnet_wp.exe実行するユーザーの名前とパスワードに変更し、Machine.config ファイルを保存します。 - CONFIG フォルダーにある一時ASP.NET ファイル フォルダーを見つけます。 Temporary ASP.NET Files フォルダーを右クリックし、Properties をクリックします。
- [Temporary ASP.NET Files のプロパティ] ダイアログ ボックスで、[セキュリティ] タブをクリックします。
- 詳細設定をクリックします。
- [一時 ASP.NET ファイルの Access コントロールの設定 ] ダイアログ ボックスで、[ 追加] をクリック。
- ダイアログ ボックスで、 Name ボックスにユーザー名を入力し、 OKをクリックします。
- [一時 ASP.NET ファイルのエントリ] ダイアログ ボックスで、ユーザーに完全なアクセス許可を付与し、[OK] をクリックしてASP.NET ファイルのプロパティダイアログ ボックスを閉じます。