Visual C# を使用して Web サイトにファイルをアップロードする
この記事では、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 を起動します。
[ ファイル] メニューの [ 新規] をポイントし、[ プロジェクト] をクリックします。
注:
Visual Studio で、[ファイル] メニューの [新規作成] をポイントし、[Web サイト] をクリックします。
[ プロジェクトの種類] で、[ Visual C# プロジェクト] をクリックします。 [ テンプレート] で、[ ASP.NET Web アプリケーション] をクリックします。
注:
Visual Studio で、[言語] の右側にある [Visual C# ] を選択 します。 [ テンプレート] で、[ Web サイト ASP.NET] をクリックします。
[ 場所 ] ボックスに次の場所を入力し、[OK] をクリック します。
http://WebServerName/ApplicationName
注:
WebServerName は、Web サーバーの名前のプレースホルダーです。 ApplicationName は、アプリケーションの名前のプレースホルダーです。
既定では、WebForm1.aspx が作成されます。
注:
Visual Studio で、[場所] の右側にある [HTTP] を選択し、「」と入力
<http://WebServerName>
します。[ 表示 ] メニューの [ HTML ソース] をクリックします。
注:
Visual Studio で、[表示] メニューの [コード] をクリックします。
フォーム属性を変更する
WebForm1 の HTML ウィンドウで、フォーム タグを次のように置き換えます。
<form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx">
属性は EncType
、ポストされるデータの形式を指定します。 ブラウザーでは、この属性を使用して、サーバーに投稿される情報をエンコードします。 このコードの action 属性は、ページが要求を処理することを指定します。 既定では、フォームのメソッド属性は post に設定され、トランザクションで大量のデータを送信できます。
[入力] コントロールを追加して、サーバーにアップロードするファイルを指定します
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 コントロールは、Input コントロールで指定したファイルをアップロードするために使用されます。
出力を表示する 1 つのラベルを含む Panel コントロールを作成する
WebForm1 の HTML ウィンドウで、Button コントロール コードの後に、開始タグと終了<form>
タグの間に次のコードを追加します。
<asp:Panel ID="frmConfirmation" Visible="False" Runat="server">
<asp:Label id="lblUploadResult" Runat="server"></asp:Label>
</asp:Panel>
このコードは、ファイルのアップロードが成功したかどうかを示すメッセージを表示するために使用されます。 この出力を表示するために、1 つのラベルを含む Panel コントロールが作成されます。
Button Click イベントにファイルをアップロードする
このセクションのコードでは、ローカル ファイル システムからファイルを取得し、ファイルがサーバーに既に存在するかどうかを確認してから、ファイルを Web サイトにアップロードします。 このコードを追加するには、次の手順に従います。
この記事の [ボタンの追加] コントロール セクションで作成された [アップロード] ボタンをダブルクリックして、ボタン コントロールのイベントのイベント ハンドラーを
Click
作成します。[コード] ウィンドウの上部に次の コード を追加します。
using System.IO;
[アップロード] ボタンのイベント ハンドラーに
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;
[ファイル] メニューの [すべて保存] をクリックします。
アップロード アクションが機能することを確認する
[ デバッグ ] メニューの [ スタート ] をクリックしてビルドし、アプリケーションを実行します。 テキスト ボックスとコマンド ボタンが表示されます。
テキスト ボックスにイメージ ファイルのパスを入力するか、[ 参照 ] をクリックしてローカル コンピューター上のイメージ ファイルを見つけます。
[ アップロード ] をクリックして、ファイルをサーバーに送信します。 ファイルが一意の場合は、アップロードが成功したことを示すメッセージが表示されます。 ファイルが既にサーバーに存在する場合は、適切なメッセージが表示されます。 このアプリケーションからアップロードしたファイルは、ローカル ハード ディスク上の場所
C:\inetpub\wwwroot\ApplicationName
に保存されます。このアプリケーションを.NET Frameworkで動作させるには、ASPNET ユーザーへのフル コントロール アクセスを許可します。 これを行うには、次の手順を実行します。
Windows エクスプローラーでアプリケーション フォルダーを見つけます。 パスは です
C:\inetpub\wwwroot\ApplicationName
。ApplicationName フォルダーを右クリックし、[プロパティ] をクリックします。 [ApplicationName プロパティ] ダイアログ ボックスが表示されます。
[セキュリティ] タブをクリックします。
[追加] をクリックします。 [ ユーザーまたはグループの選択 ] ダイアログ ボックスが表示されます。
注:
Visual Studio の [ ユーザー、コンピューター、またはグループの選択 ] ダイアログ ボックスが表示されます。
[選択するオブジェクト名を入力します] ボックスに「ASPNET」と入力し、[OK] をクリックします。
[ApplicationName プロパティ] ダイアログ ボックスで、[グループ名またはユーザー名] の一覧で ASPNET ユーザーをクリックします。
[許可] で、[フル コントロール チェック] ボックスをクリックして選択し、[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; } }
注:
Visual Studio で生成されるコードは、Visual Studio .NET で生成されたコードとは異なります。
トラブルシューティング
- ランタイム をインストール したパスの下にある CONFIG フォルダー内のコンピューターにあるMachine.configファイルを開きます。
<processModel>
Machine.config ファイル内のセクションを探し、 属性と 属性をpassword
、W3wp.exe または Aspnet_wp.exe 実行するユーザーの名前とパスワードに変更user
し、Machine.config ファイルを保存します。- CONFIG フォルダーにある一時 ASP.NET ファイル フォルダーを見つけます。 [ 一時 ASP.NET ファイル ] フォルダーを右クリックし、[ プロパティ] をクリックします。
- [ 一時 ASP.NET ファイルのプロパティ ] ダイアログ ボックスで、[ セキュリティ ] タブをクリックします。
- [詳細設定] をクリックします。
- [一時 ASP.NET ファイルのAccess Control設定] ダイアログ ボックスで、[追加] をクリックします。
- ダイアログ ボックスの [ 名前 ] ボックスにユーザー名を入力し、[OK] をクリック します。
- [ 一時 ASP.NET ファイルのアクセス許可エントリ ] ダイアログ ボックスで、ユーザーに完全なアクセス許可を付与し、[ OK] を クリックして [ 一時 ASP.NET ファイルのプロパティ ] ダイアログ ボックスを閉じます。
関連情報
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示