Verwenden von Visual C# zum Hochladen einer Datei auf eine Website

In diesem Artikel wird beschrieben, wie Sie eine Datei mithilfe von Microsoft Visual C# hochladen.

Ursprüngliche Produktversion:   Visual C#, ASP.NET, Internetinformationsdienste
Ursprüngliche KB-Nummer:   816150

Einführung

In diesem Schritt-für-Schritt-Artikel wird erläutert, wie Sie eine vorhandene Imagedatei von Ihrer lokalen Festplatte auf eine Website hochladen. Ein Eingabesteuerelement wird verwendet, um ein Bild von Ihrem lokalen Computer hochzuladen. Diese Datei, die hochgeladen wird, wird für den Server überprüft, um sicherzustellen, dass Sie keine vorhandene Datei überschreiben, die bereits hochgeladen wurde. Die hochgeladene Datei wird überprüft, wenn sie auf dem Server vorhanden ist. In diesem Artikel wird das EncType Attribut des Formulars verwendet, um die Funktionalität zu erzielen.

Anforderungen

In diesem Artikel wird davon ausgegangen, dass Sie mit den folgenden Themen vertraut sind:

  • Webanwendungen
  • ASP.NET

In der folgenden Liste wird die empfohlene Software- und Netzwerkinfrastruktur beschrieben, die Sie benötigen:

  • Visual C# .NET oder Visual C #
  • Internetinformationsdienste (IIS)

Erstellen eines ASP.NET Webformulars

  1. Starten Sie Visual Studio .NET oder Visual Studio.

  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

    Hinweis

    Zeigen Sie in Visual Studio im Menü "Datei" auf "Neu", und klicken Sie dann auf "Website".

  3. Klicken Sie unter Project Typen auf Visual C#-Projekte. Klicken Sie unter Vorlagen auf ASP.NET Webanwendung.

    Hinweis

    Wählen Sie in Visual Studio rechts neben "Sprache" Visual C# aus. Klicken Sie unter Vorlagen auf ASP.NET Website.

  4. Geben Sie im Feld Speicherort den folgenden Speicherort ein, und klicken Sie dann auf OK:
    http://WebServerName/ApplicationName

    Hinweis

    WebServerName ist ein Platzhalter für den Namen des Webservers. ApplicationName ist ein Platzhalter für den Namen der Anwendung.

    Standardmäßig wird WebForm1.aspx erstellt.

    Hinweis

    Wählen Sie in Visual Studio auf der rechten Seite des Speicherorts HTTP aus, und geben Sie dann <http://WebServerName> .

  5. Klicken Sie im Menü "Ansicht" auf die HTML-Quelle.

    Hinweis

    Klicken Sie in Visual Studio im Menü "Ansicht" auf "Code".

Ändern der Formularattribute

Ersetzen Sie im HTML-Fenster von WebForm1 das Formulartag durch Folgendes:

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

Das EncType Attribut gibt das Format der bereitgestellten Daten an. Der Browser verwendet dieses Attribut zum Codieren der Informationen, die auf dem Server bereitgestellt werden. Das Aktionsattribut in diesem Code gibt an, dass die Seite die Anforderung verarbeitet. Standardmäßig ist das Methodenattribut des Formulars auf "Post" festgelegt, sodass Sie große Datenmengen in der Transaktion senden können.

Fügen Sie das Eingabesteuerelement hinzu, um die Datei anzugeben, die Sie auf den Server hochladen möchten.

  1. Fügen Sie im HTML-Fenster von WebForm1 den folgenden Code zwischen den öffnenden und den schließenden <form> Tags hinzu:

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

    Dieses Eingabesteuerelement gibt die Datei an, die Sie auf den Server hochladen möchten.

  2. Sie können eine Textzeichenfolge vor dem Steuerelement hinzufügen, um den Benutzer aufzufordern. Geben Sie den folgenden Text vor dem Eingabesteuerelement im HTML-Fenster von WebForm1 ein:

    Wählen Sie die Bilddatei aus, die auf den Server hochgeladen werden soll:

Hinzufügen eines Schaltflächensteuerelements

  1. Fügen Sie im HTML-Fenster von WebForm1 den folgenden Code zwischen den öffnenden und schließenden <form> Tags nach dem Eingabesteuerelementcode hinzu:

    <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
    
  2. Dieses Schaltflächensteuerelement wird verwendet, um die Datei hochzuladen, die Sie im Eingabesteuerelement angegeben haben.

Erstellen eines Systemsteuerungssteuerelements, das eine einzelne Beschriftung zum Anzeigen der Ausgabe enthält

Fügen Sie im HTML-Fenster von WebForm1 den folgenden Code zwischen den öffnenden und schließenden <form> Tags nach dem Code des Schaltflächensteuerelements hinzu:

<asp:Panel ID="frmConfirmation" Visible="False" Runat="server">
    <asp:Label id="lblUploadResult" Runat="server"></asp:Label>
</asp:Panel>

Dieser Code wird verwendet, um die Meldung anzuzeigen, um anzugeben, ob der Dateiupload erfolgreich war. Um diese Ausgabe anzuzeigen, wird ein Systemsteuerungs-Steuerelement erstellt, das eine einzelne Beschriftung enthält.

Hochladen der Datei auf dem Button Click-Ereignis

Der Code in diesem Abschnitt ruft die Datei aus dem lokalen Dateisystem ab, überprüft, ob die Datei bereits auf dem Server vorhanden ist, und lädt die Datei dann auf die Website hoch. Führen Sie die folgenden Schritte aus, um diesen Code hinzuzufügen:

  1. Doppelklicken Sie auf die Schaltfläche Hochladen, die im Abschnitt zum Hinzufügen eines Schaltflächensteuerelements in diesem Artikel erstellt wurde, um einen Ereignishandler für das Click Ereignis des Schaltflächensteuerelements zu erstellen.

  2. Fügen Sie oben im Codefenster den folgenden Code hinzu:

    using System.IO;
    
  3. Fügen Sie dem Click Ereignishandler für die Schaltfläche Hochladen den folgenden Code hinzu:

    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. Klicken Sie im Menü Datei auf Alles speichern.

Überprüfen, ob die Uploadaktion funktioniert

  1. Klicken Sie im Menü "Debuggen" auf "Start", um die Anwendung zu erstellen und auszuführen. Ein Textfeld und eine Befehlsschaltfläche werden angezeigt.

  2. Geben Sie den Pfad der Bilddatei in das Textfeld ein, oder klicken Sie auf "Durchsuchen", um die Bilddatei auf Ihrem lokalen Computer zu suchen.

  3. Klicken Sie auf Hochladen, um die Datei an den Server zu senden. Wenn die Datei eindeutig ist, erhalten Sie eine Meldung, dass der Upload erfolgreich war. Wenn die Datei bereits auf dem Server vorhanden ist, erhalten Sie eine entsprechende Meldung. Die Dateien, die Sie aus dieser Anwendung hochladen, werden am Speicherort gespeichert: C:\inetpub\wwwroot\ApplicationName auf der lokalen Festplatte.

  4. Damit diese Anwendung im .NET Framework funktioniert, lassen Sie den Vollzugriff auf den ASPNET-Benutzer zu. Gehen Sie dazu wie folgt vor:

    1. Suchen Sie den Anwendungsordner im Windows Explorer. Der Pfad lautet C:\inetpub\wwwroot\ApplicationName .

    2. Klicken Sie mit der rechten Maustaste auf den Ordner "ApplicationName", und klicken Sie dann auf "Eigenschaften". Das Dialogfeld ApplicationName-Eigenschaften wird angezeigt.

    3. Klicken Sie auf die Registerkarte Sicherheit.

    4. Klicken Sie auf Hinzufügen. Das Dialogfeld Benutzer oder Gruppen auswählen wird angezeigt.

      Hinweis

      In Visual Studio wird das Dialogfeld Benutzer, Computer oder Gruppen auswählen angezeigt.

    5. Geben Sie ASPNET in das Feld "Objektnamen eingeben" ein, und klicken Sie dann auf "OK".

    6. Klicken Sie im Dialogfeld ApplicationName-Eigenschaften in der Liste der Gruppen- oder Benutzernamen auf den ASPNET-Benutzer.

    7. Klicken Sie unter "Zulassen" auf das Kontrollkästchen "Vollzugriff", und klicken Sie dann auf "OK".

Vollständige Codeauflistung

  • 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;
        }
    }
    

Hinweis

Der in Visual Studio generierte Code unterscheidet sich von dem in Visual Studio .NET generierten Code.

Problembehandlung

  1. Öffnen Sie die Machine.config Datei, die sich auf Ihrem Computer im Ordner "CONFIG" unter dem Pfad befindet, in dem Sie die Laufzeit installiert haben.
  2. Suchen Sie den <processModel> Abschnitt in der datei Machine.config, ändern Sie die Attribute in den Namen und das Kennwort des Benutzers, unter dem user W3wp.exe oder Aspnet_wp.exe ausgeführt werden password soll, und speichern Sie dann die Machine.config Datei.
  3. Suchen Sie den Ordner "Temporäre ASP.NET Dateien", der sich im Ordner "CONFIG" befindet. Klicken Sie mit der rechten Maustaste auf den Ordner "Temporäre ASP.NET Dateien", und klicken Sie dann auf "Eigenschaften".
  4. Klicken Sie im Dialogfeld Eigenschaften für temporäre ASP.NET Dateien auf die Registerkarte "Sicherheit".
  5. Klicken Sie auf Erweitert.
  6. Klicken Sie im Dialogfeld "Zugriffssteuerung Einstellungen für temporäre ASP.NET Dateien" auf "Hinzufügen".
  7. Geben Sie im Dialogfeld den Benutzernamen in das Feld "Name" ein, und klicken Sie dann auf "OK".
  8. Geben Sie im Dialogfeld "Berechtigungseintrag für temporäre ASP.NET Dateien" dem Benutzer vollständige Berechtigungen zu, und klicken Sie dann auf "OK", um das Dialogfeld "Eigenschaften für temporäre ASP.NET Dateien" zu schließen.

References