Verwenden von Visual C# zum Hochladen einer Datei in 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 Bilddatei 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 anhand des Servers überprüft, um sicherzustellen, dass Sie keine vorhandene Datei überschreiben, die bereits hochgeladen wurde. Die hochgeladene Datei wird überprüft, ob sie auf dem Server vorhanden ist. In diesem Artikel wird das EncType -Attribut des Formulars verwendet, um die Funktionalität zu erreichen.

Anforderungen

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

  • Webanwendungen
  • ASP.NET

Die folgende Liste enthält die empfohlene Software- und Netzwerkinfrastruktur, 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 Projekttypen auf Visual C#-Projekte. Klicken Sie unter Vorlagen auf ASP.NET-Webanwendung.

    Hinweis

    Wählen Sie in Visual Studio rechts neben Sprache die Option 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 Ihres Webservers. ApplicationName ist ein Platzhalter für den Namen Ihrer Anwendung.

    Standardmäßig wird WebForm1.aspx erstellt.

    Hinweis

    Wählen Sie in Visual Studio rechts neben Speicherortdie Option HTTP aus, und geben Sie dann ein<http://WebServerName>.

  5. Klicken Sie im Menü Ansicht auf 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 daten an, die gepostet werden. Der Browser verwendet dieses Attribut, um die Informationen zu codieren, die an den Server gesendet werden. Das Action-Attribut in diesem Code gibt an, dass die Seite die Anforderung verarbeitet. Standardmäßig ist das Methodensattribut 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 dem öffnenden und dem schließenden <form> Tag 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 Input-Steuerelement 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ächen-Steuerelement wird verwendet, um die Datei hochzuladen, die Sie im Eingabesteuerelement angegeben haben.

Erstellen eines Panel-Steuerelements, das eine einzelne Bezeichnung 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 Button-Steuerelementcode 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 Panel-Steuerelement erstellt, das eine einzelne Bezeichnung enthält.

Hochladen der Datei auf das 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 Schaltflächen-Steuerelement hinzufügen dieses Artikels erstellt wurde, um einen Ereignishandler für das Click Ereignis des Schaltflächensteuerelements zu erstellen.

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

    using System.IO;
    
  3. Fügen Sie dem Ereignishandler für die Schaltfläche Hochladen den Click 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, erlauben Sie dem ASPNET-Benutzervollzugriff. Gehen Sie dazu wie folgt vor:

    1. Suchen Sie den Anwendungsordner in Windows Explorer. Der Pfad ist 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 Geben Sie die auszuwählenden Objektnamen ein, und klicken Sie dann auf OK.

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

    7. Aktivieren Sie unter Zulassen 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 befindet, im Ordner CONFIG unter dem Pfad, in dem Sie die Runtime installiert haben.
  2. Suchen Sie den <processModel> Abschnitt in der Machine.config-Datei , ändern Sie die user Attribute und password in den Namen und das Kennwort des Benutzers, unter dem W3wp.exe oder Aspnet_wp.exe ausgeführt werden 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 temporärer ASP.NET Dateien auf die Registerkarte Sicherheit .
  5. Klicken Sie auf Erweitert.
  6. Klicken Sie im Dialogfeld Access Control 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. Erteilen Sie dem Benutzer im Dialogfeld Berechtigungseintrag für temporäre ASP.NET Dateien vollständige Berechtigungen, und klicken Sie dann auf OK , um das Dialogfeld Eigenschaften temporärer ASP.NET Dateien zu schließen.

References