Freigeben über


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 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 auf dem 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 erreichen.

Anforderungen

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

  • Webanwendungen
  • ASP.NET

In der folgenden Liste sind die empfohlenen Software- und Netzwerkinfrastrukturen aufgeführt, 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.

    Notiz

    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.

    Notiz

    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

    Notiz

    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.

    Notiz

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

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

    Notiz

    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 geposteten Daten an. Der Browser verwendet dieses Attribut, um die Informationen zu codieren, die auf dem Server bereitgestellt werden. Das Aktionsattribute in diesem Code gibt an, dass die Seite die Anforderung verarbeitet. Standardmäßig ist das Methodenattribute des Formulars auf "Posten" 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 Öffnen 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 vor dem Steuerelement eine Textzeichenfolge 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 Panel-Steuerelements, das eine einzelne Beschriftung enthält, um die Ausgabe anzuzeigen

Fügen Sie im HTML-Fenster von WebForm1 den folgenden Code zwischen den öffnenden und schließenden <form> Tags nach dem Schaltflächen-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 ist. 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ächensteuerelement 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 Codefenster 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 Alle 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 Nachricht. Die Dateien, die Sie von dieser Anwendung hochladen, werden am Speicherort gespeichert: C:\inetpub\wwwroot\ApplicationName auf der lokalen Festplatte.

  4. Damit diese Anwendung in .NET Framework funktioniert, ermöglichen Sie den Vollzugriff auf den ASPNET-Benutzer . 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.

      Notiz

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

    5. Geben Sie ASPNET in das Zu markierende Feld ein, geben Sie die 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. Klicken Sie unter "Zulassen", um das Kontrollkästchen "Vollzugriff " zu aktivieren, und klicken Sie dann auf "OK".

Vollständige Codeliste

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

Notiz

Der in Visual Studio generierte Code unterscheidet sich vom in Visual Studio .NET generierten Code.

Problembehandlung

  1. Öffnen Sie die Datei Machine.config , die sich auf Ihrem Computer befindet, im Ordner CONFIG unter dem Pfad, unter dem Sie die Laufzeit installiert haben.
  2. Suchen Sie den <processModel> Abschnitt in der Datei "Machine.config ", ändern Sie die user Attribute und die password Attribute in den Namen und das Kennwort des Benutzers, der W3wp.exe oder Aspnet_wp.exe ausführen soll, und speichern Sie dann die Datei "Machine.config ".
  3. Suchen Sie den Ordner "Temporary ASP.NET Files", 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 Temporary ASP.NET Files Properties (Eigenschaften temporärer ASP.NET-Dateien) auf die Registerkarte Sicherheit.
  5. Klicken Sie auf Erweitert.
  6. Klicken Sie im Dialogfeld "Zugriffssteuerungseinstellungen 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 "Temporäre ASP.NET Dateieigenschaften " zu schließen.

References