Web Visual C#にファイルをアップロードするには、次のコマンドを使用します。

この記事では、Microsoft ファイルを使用してファイルをアップロードする方法についてVisual C#。

元の製品バージョン:  Visual C#、ASP.NET、インターネット インフォメーション サービス
元の KB 番号:   816150

概要

この記事では、ローカル ハード ディスク ドライブから Web サイトに既存のイメージ ファイルをアップロードする方法について詳しく説明します。 Input コントロールは、ローカル コンピューターから画像をアップロードするために使用されます。 アップロードされているこのファイルは、既にアップロードされている既存のファイルを上書きしないサーバーに対して検証されます。 アップロードされたファイルがサーバー上に存在する場合は検証されます。 この記事では、 EncType フォームの属性を使用して機能を実現します。

要件

この記事では、次のトピックに精通している必要があります。

  • Web アプリケーション
  • ASP.NET

次の一覧では、必要な推奨されるソフトウェアとネットワーク インフラストラクチャの概要を示します。

  • Visual C# .NET または Visual C#
  • インターネット インフォメーション サービス (IIS)

Web フォーム ASP.NET 作成する

  1. .NET またはVisual Studioを開始Visual Studio。

  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

    注意

    [Visual Studio] メニューの [新規] を ポイント し、[Web サイト]をクリックします

  3. [プロジェクト Project] で、[プロジェクト] Visual C#クリックします。 [テンプレート ] で、[Web アプリケーション ASP.NET をクリックします

    注意

    [Visual Studio] で、[言語] Visual C# 右側の [言語] を 選択します。 [テンプレート] で、[Web サイト ASP.NET クリックします

  4. [場所] ボックス に次の場所を入力し 、[OK] をクリックします
    http://WebServerName/ApplicationName

    注意

    WebServerName は、Web サーバーの名前のプレースホルダーです。 ApplicationName は、アプリケーションの名前のプレースホルダーです。

    既定では 、WebForm1.aspx が 作成されます。

    注意

    [Visual Studio] で、[場所] の右側にある [HTTP] を選択し、と入力します <http://WebServerName>

  5. [表示] メニューの [HTML ソース] をクリックします

    注意

    [Visual Studio] メニューの [コード]をクリック します。

フォーム属性の変更

WebForm1の HTML ウィンドウで、フォーム タグを次に置き換えます。

<form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx">

属性 EncType は、投稿されるデータの形式を指定します。 ブラウザーは、この属性を使用して、サーバーに投稿される情報をエンコードします。 このコードの action 属性は、ページが要求を処理するを指定します。 既定では、フォームの method 属性は投稿に設定されています。そのため、トランザクションで大量のデータを送信できます。

Input コントロールを追加して、サーバーにアップロードするファイルを指定します。

  1. WebForm1の HTML ウィンドウで、開始タグと終了タグの間に次のコードを追加 <form> します。

    <INPUT id="oFile" type="file" runat="server" NAME="oFile">
    

    この Input コントロールは、サーバーにアップロードするファイルを指定します。

  2. コントロールの前にテキスト文字列を追加して、ユーザーにメッセージを表示できます。 WebForm1 の HTML ウィンドウの Input コントロールの前に次のテキスト を入力します

    サーバーにアップロードするイメージ ファイルを選択します。

Button コントロールを追加する

  1. WebForm1の HTML ウィンドウで、入力コントロール コードの後に、開始タグと終了タグの間に次の <form> コードを追加します。

    <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
    
  2. この 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 コントロールが作成されます。

アップロードクリック イベントでファイルを開く

このセクションのコードは、ローカル ファイル システムからファイルを取得し、ファイルがサーバー上に既に存在するかどうかを確認し、そのファイルを Web サイトにアップロードします。 このコードを追加するには、次の手順を実行します。

  1. この記事の [アップロード] コントロール セクションで作成された[ボタン] ボタンをダブルクリックして、ボタン コントロールのイベントのイベント ハンドラー Click を作成します。

  2. [コード] ウィンドウの上部に次のコードを 追加 します。

    using System.IO;
    
  3. [イベント] ボタンのイベント 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;
    
  4. [ファイル] メニューの [すべて保存] をクリックします。

アップロード アクションが動作するを確認する

  1. [デバッグ] メニューの [スタート] をクリック してビルドし、アプリケーションを実行します。 テキスト ボックスとコマンド ボタンが表示されます。

  2. テキスト ボックスにイメージ ファイルのパスを入力するか、[参照] をクリックして、ローカル コンピューター上のイメージ ファイルを探します。

  3. [アップロード] をクリックして、ファイルをサーバーに送信します。 ファイルが一意の場合は、アップロードが成功したというメッセージが表示されます。 ファイルがサーバー上に既に存在する場合は、適切なメッセージが表示されます。 このアプリケーションからアップロードしたファイルは、ローカル ハード ディスク上の場所 C:\inetpub\wwwroot\ApplicationName に保存されます。

  4. このアプリケーションを ASPNET ユーザーで動作 .NET Framework、ASPNET ユーザー へのフル コントロール アクセスを許可します。 これを行うには、次の手順を実行します。

    1. エクスプローラーでアプリケーション フォルダー Windowsします。 パスは C:\inetpub\wwwroot\ApplicationName です。

    2. ApplicationName フォルダーを 右クリックし 、[プロパティ] を クリックします[ApplicationName プロパティ] ダイアログ ボックスが表示されます。

    3. [セキュリティ] タブをクリックします。

    4. [追加] をクリックします。 [ ユーザーまたはグループの選択] ダイアログ ボックスが表示されます。

      注意

      [Visual Studioユーザー、コンピューター、またはグループの 選択] ダイアログ ボックスが表示されます。

    5. [ 選択するオブジェクト名入力する] ボックスに 「ASPNET」と入力し 、[OK] をクリックします

    6. [ApplicationName のプロパティ] ダイアログ ボックスで、[グループ名またはユーザー名] ボックスの一覧で ASPNET ユーザーをクリック します。

    7. [ 許可] で、[フル コントロール] チェック ボックスをオンにし 、[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 .NET で生成されるコードVisual Studio異なります。

トラブルシューティング

  1. ランタイムを Machine.config パスの下にある CONFIG フォルダー内のコンピューター上にあるファイルを開きます。
  2. Machine.configファイルでセクションを検索し、属性を W3wp.exe または Aspnet_wp.exe で実行するユーザーの名前とパスワードに変更し、Machine.configファイル <processModel> user password を保存 します。
  3. CONFIG フォルダー内 ASP.NET 一時ファイル フォルダーを します。 [一時ファイル]フォルダーを ASP.NET し、[プロパティ] を クリックします
  4. [ファイルの 一時 ASP.NET] ダイアログ ボックスで、[セキュリティ] タブ をクリック します。
  5. [詳細設定] をクリックします。
  6. [一時 ファイルのアクセス制御設定] ダイアログ ボックス ASP.NET、[追加] を クリックします
  7. ダイアログ ボックスで、[名前] ボックスにユーザー名を 入力、[OK] をクリックします
  8. [一時的なファイルのアクセス許可 ASP.NET] ダイアログ ボックスで、ユーザーに完全なアクセス許可を与え 、[OK] をクリックして [一時ファイルのプロパティ] ダイアログ ボックス を閉 ASP.NET します。

関連情報