Udostępnij za pośrednictwem


Przekazywanie pliku do witryny sieci Web przy użyciu języka Visual C#

W tym artykule opisano sposób przekazywania pliku przy użyciu języka Microsoft Visual C#.

Oryginalna wersja produktu: Visual C#, ASP.NET, Internet Information Services
Oryginalny numer KB: 816150

Wprowadzenie

W tym artykule krok po kroku omówiono sposób przekazywania istniejącego pliku obrazu z lokalnego dysku twardego do witryny sieci Web. Kontrolka Dane wejściowe służy do przekazywania obrazu z komputera lokalnego. Ten przekazany plik jest weryfikowany na serwerze, aby upewnić się, że nie zastąpisz istniejącego pliku, który został już przekazany. Przekazany plik jest weryfikowany, czy istnieje na serwerze. W tym artykule użyto EncType atrybutu formularza, aby osiągnąć funkcjonalność.

Wymagania

W tym artykule założono, że znasz następujące tematy:

  • Aplikacje sieci Web
  • ASP.NET

Na poniższej liście przedstawiono zalecane oprogramowanie i wymaganą infrastrukturę sieci:

  • Visual C# .NET lub Visual C#
  • Internet Information Services (IIS)

Tworzenie formularza internetowego ASP.NET

  1. Uruchom program Visual Studio .NET lub Visual Studio.

  2. W menu Plik wskaż polecenie Nowy, a następnie kliknij Projekt.

    Uwaga 16.

    W programie Visual Studio wskaż polecenie Nowy w menu Plik , a następnie kliknij pozycję Witryna sieci Web.

  3. W obszarze Typy projektów kliknij pozycję Projekty Visual C#. W obszarze Szablony kliknij pozycję ASP.NET aplikacja internetowa.

    Uwaga 16.

    W programie Visual Studio wybierz pozycję Visual C# po prawej stronie pozycji Język. W obszarze Szablony kliknij ASP.NET witrynę sieci Web.

  4. W polu Lokalizacja wpisz następującą lokalizację, a następnie kliknij przycisk OK:
    http://WebServerName/ApplicationName

    Uwaga 16.

    WebServerName to symbol zastępczy nazwy serwera sieci Web. ApplicationName to symbol zastępczy nazwy aplikacji.

    Domyślnie WebForm1.aspx jest tworzony.

    Uwaga 16.

    W programie Visual Studio wybierz pozycję HTTP po prawej stronie pozycji Lokalizacja, a następnie wpisz <http://WebServerName>.

  5. W menu Widok kliknij pozycję Źródło HTML.

    Uwaga 16.

    W programie Visual Studio kliknij pozycję Kod w menu Widok .

Modyfikowanie atrybutów formularza

W oknie HTML formularza WebForm1 zastąp tag formularza następującym kodem:

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

Atrybut EncType określa format danych, które są publikowane. Przeglądarka używa tego atrybutu do kodowania informacji publikowanych na serwerze. Atrybut akcji w tym kodzie określa, że strona będzie przetwarzać żądanie. Domyślnie atrybut metody formularza jest ustawiany na post, aby można było wysyłać duże ilości danych w transakcji.

Dodaj kontrolkę Dane wejściowe, aby określić plik, który chcesz przekazać do serwera

  1. W oknie HTML aplikacji WebForm1 dodaj następujący kod między otwarciem a tagami zamykającymi<form>:

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

    Ta kontrolka Dane wejściowe określa plik, który chcesz przekazać do serwera.

  2. Możesz dodać ciąg tekstowy przed kontrolką, aby wyświetlić monit użytkownika. Wpisz następujący tekst przed kontrolką Input w oknie HTML elementu WebForm1:

    Wybierz plik obrazu, który ma być przekazywany do serwera:

Dodawanie kontrolki Przycisk

  1. W oknie HTML aplikacji WebForm1 dodaj następujący kod między tagami otwierania i zamykania <form> po kodzie kontrolki Input:

    <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
    
  2. Ta kontrolka Przycisk służy do przekazywania pliku określonego w kontrolce Dane wejściowe.

Tworzenie kontrolki Panel zawierającej pojedynczą etykietę w celu wyświetlenia danych wyjściowych

W oknie HTML aplikacji WebForm1 dodaj następujący kod między tagami otwierania i zamykania <form> po kodzie kontrolki Przycisk:

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

Ten kod służy do wyświetlania komunikatu w celu wskazania, czy przekazywanie pliku zakończyło się pomyślnie. Aby wyświetlić te dane wyjściowe, zostanie utworzona kontrolka Panel zawierająca pojedynczą etykietę.

Przekaż plik w zdarzeniu przycisku Kliknij

Kod w tej sekcji pobiera plik z lokalnego systemu plików, sprawdza, czy plik już istnieje na serwerze, a następnie przekazuje plik do witryny sieci Web. Aby dodać ten kod, wykonaj następujące kroki:

  1. Kliknij dwukrotnie przycisk Przekaż utworzony w sekcji Dodawanie kontrolki Przycisk w tym artykule, aby utworzyć procedurę obsługi zdarzeń dla Click zdarzenia kontrolki przycisku.

  2. Dodaj następujący kod w górnej części okna Kod :

    using System.IO;
    
  3. Dodaj następujący kod do Click procedury obsługi zdarzeń dla przycisku Przekaż :

    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. W menu File kliknij pozycję Save All.

Sprawdź, czy akcja przekazywania działa

  1. W menu Debugowanie kliknij przycisk Start, aby skompilować i uruchomić aplikację. Zostanie wyświetlone pole tekstowe i przycisk polecenia.

  2. Wpisz ścieżkę pliku obrazu w polu tekstowym lub kliknij przycisk Przeglądaj , aby zlokalizować plik obrazu na komputerze lokalnym.

  3. Kliknij pozycję Przekaż , aby wysłać plik na serwer. Jeśli plik jest unikatowy, zostanie wyświetlony komunikat informujący o pomyślnym przekazaniu. Jeśli plik już istnieje na serwerze, zostanie wyświetlony odpowiedni komunikat. Pliki przekazywane z tej aplikacji są zapisywane w lokalizacji: C:\inetpub\wwwroot\ApplicationName na lokalnym dysku twardym.

  4. Aby aplikacja działała w programie .NET Framework, zezwól na pełny dostęp do użytkownika platformy ASPNET . W tym celu wykonaj następujące kroki:

    1. Znajdź folder aplikacji w Eksploratorze Windows. Ścieżka to C:\inetpub\wwwroot\ApplicationName.

    2. Kliknij prawym przyciskiem myszy folder ApplicationName , a następnie kliknij polecenie Właściwości. Zostanie wyświetlone okno dialogowe Właściwości applicationName.

    3. Kliknij przycisk zabezpieczeń kartę.

    4. Kliknij przycisk Dodaj. Zostanie wyświetlone okno dialogowe Wybieranie użytkowników lub grup.

      Uwaga 16.

      W programie Visual Studio zostanie wyświetlone okno dialogowe Wybieranie użytkowników, komputerów lub grup .

    5. Wpisz ASPNET w polu Wprowadź nazwy obiektów do wybrania , a następnie kliknij przycisk OK.

    6. W oknie dialogowym Właściwości applicationName kliknij użytkownika ASPNET na liście Nazwy grup lub użytkowników.

    7. W obszarze Zezwalaj kliknij, aby zaznaczyć pole wyboru Pełna kontrola , a następnie kliknij przycisk OK.

Kompletna lista kodu

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

Uwaga 16.

Kod wygenerowany w programie Visual Studio różni się od kodu wygenerowanego w programie Visual Studio .NET.

Rozwiązywanie problemów

  1. Otwórz plik Machine.config znajdujący się na komputerze w folderze CONFIG w ścieżce, w której zainstalowano środowisko uruchomieniowe.
  2. Znajdź sekcję <processModel> w pliku Machine.config , zmień user atrybuty i password na nazwę i hasło użytkownika, którego chcesz W3wp.exe lub Aspnet_wp.exe do uruchomienia, a następnie zapisz plik Machine.config .
  3. Znajdź folder Tymczasowe pliki ASP.NET , który znajduje się w folderze CONFIG . Kliknij prawym przyciskiem myszy folder Tymczasowe pliki ASP.NET , a następnie kliknij polecenie Właściwości.
  4. W oknie dialogowym Właściwości plików tymczasowej ASP.NET kliknij kartę Zabezpieczenia.
  5. Kliknij Zaawansowane.
  6. W oknie dialogowym Ustawienia kontroli dostępu dla plików tymczasowych ASP.NET kliknij przycisk Dodaj.
  7. W oknie dialogowym wpisz nazwę użytkownika w polu Nazwa , a następnie kliknij przycisk OK.
  8. W wpis uprawnień dla plików tymczasowych ASP.NET okno dialogowe, nadaj użytkownikowi pełne uprawnienia, a następnie kliknij przycisk OK, aby zamknąć okno dialogowe Właściwości plików tymczasowych ASP.NET.

Informacje