Usare Visual C# per caricare un file in un sito Web

Questo articolo descrive come caricare un file usando Microsoft Visual C#.

Versione originale del prodotto: Visual C#, ASP.NET, Internet Information Services
Numero KB originale: 816150

Introduzione

Questo articolo dettagliato illustra come caricare un file di immagine esistente dall'unità disco rigido locale in un sito Web. Un controllo Input viene usato per caricare un'immagine dal computer locale. Questo file caricato viene convalidato nel server per assicurarsi di non sovrascrivere un file esistente già caricato. Il file caricato viene convalidato se esiste nel server. Questo articolo usa l'attributo EncType del modulo per ottenere la funzionalità.

Requisiti

Questo articolo presuppone che si abbia familiarità con gli argomenti seguenti:

  • Applicazioni Web
  • ASP.NET

L'elenco seguente descrive il software e l'infrastruttura di rete consigliati necessari:

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

Creare un Modulo Web ASP.NET

  1. Avviare Visual Studio .NET o Visual Studio.

  2. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

    Nota

    In Visual Studio scegliere Nuovo dal menu File e quindi fare clic su Sito Web.

  3. In Tipi di progetto fare clic su Progetti Visual C#. In Modelli fare clic su ASP.NET'applicazione Web.

    Nota

    In Visual Studio selezionare Visual C# a destra di Language. In Modelli fare clic su ASP.NET sito Web.

  4. Nella casella Percorso digitare il percorso seguente e quindi fare clic su OK:
    http://WebServerName/ApplicationName

    Nota

    WebServerName è un segnaposto per il nome del server Web. ApplicationName è un segnaposto per il nome dell'applicazione.

    Per impostazione predefinita, viene creato WebForm1.aspx.

    Nota

    In Visual Studio selezionare HTTP a destra di Location ( Posizione) e quindi digitare <http://WebServerName>.

  5. Scegliere Origine HTML dal menu Visualizza.

    Nota

    In Visual Studio fare clic su Codice dal menu Visualizza .

Modificare gli attributi del modulo

Nella finestra HTML di WebForm1 sostituire il tag del modulo con il codice seguente:

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

L'attributo EncType specifica il formato dei dati pubblicati. Il browser usa questo attributo per codificare le informazioni inviate al server. L'attributo action in questo codice specifica che la pagina elabora la richiesta. Per impostazione predefinita, l'attributo method del modulo è impostato su post in modo da poter inviare grandi quantità di dati nella transazione.

Aggiungere il controllo Input per specificare il file da caricare nel server

  1. Nella finestra HTML di WebForm1 aggiungere il codice seguente tra i tag di apertura e di chiusura <form> :

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

    Questo controllo input specifica il file che si desidera caricare nel server.

  2. È possibile aggiungere una stringa di testo davanti al controllo per richiedere all'utente. Digitare il testo seguente davanti al controllo Input nella finestra HTML di WebForm1:

    Selezionare il file di immagine da caricare nel server:

Aggiungere un controllo Button

  1. Nella finestra HTML di WebForm1 aggiungere il codice seguente tra i tag di apertura e chiusura <form> , dopo il codice del controllo Input:

    <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
    
  2. Questo controllo Button viene usato per caricare il file specificato nel controllo Input.

Creare un controllo Panel che contiene una singola etichetta per visualizzare l'output

Nella finestra HTML di WebForm1 aggiungere il codice seguente tra i tag di apertura e chiusura <form> , dopo il codice del controllo Button:

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

Questo codice viene usato per visualizzare il messaggio per indicare se il caricamento del file ha esito positivo. Per visualizzare questo output, viene creato un controllo Panel che contiene una singola etichetta.

Caricare il file nell'evento Button Click

Il codice in questa sezione recupera il file dal file system locale, verifica se il file esiste già nel server e quindi carica il file nel sito Web. Per aggiungere questo codice, seguire questa procedura:

  1. Fare doppio clic sul pulsante Carica creato nella sezione Aggiungi un controllo Pulsante di questo articolo per creare un gestore eventi per l'evento Click del controllo pulsante.

  2. Aggiungere il codice seguente nella parte superiore della finestra Codice :

    using System.IO;
    
  3. Aggiungere il codice seguente al Click gestore eventi per il pulsante Carica :

    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. Scegliere Salva tutto dal menu File.

Verificare che l'azione di caricamento funzioni

  1. Scegliere Avvia dal menu Debug per compilare ed eseguire l'applicazione. Vengono visualizzati una casella di testo e un pulsante di comando.

  2. Digitare il percorso del file di immagine nella casella di testo oppure fare clic su Sfoglia per individuare il file di immagine nel computer locale.

  3. Fare clic su Carica per inviare il file al server. Se il file è univoco, viene visualizzato un messaggio che informa che il caricamento è riuscito. Se il file esiste già nel server, viene visualizzato un messaggio appropriato. I file caricati da questa applicazione vengono salvati nel percorso: C:\inetpub\wwwroot\ApplicationName nel disco rigido locale.

  4. Per rendere l'applicazione funzionante in .NET Framework, consentire l'accesso con controllo completo all'utente ASPNET . A tal fine, attenersi alla seguente procedura:

    1. Individuare la cartella dell'applicazione in Esplora risorse. Il percorso è C:\inetpub\wwwroot\ApplicationName.

    2. Fare clic con il pulsante destro del mouse sulla cartella ApplicationName e quindi scegliere Proprietà. Verrà visualizzata la finestra di dialogo Proprietà ApplicationName .

    3. Fare clic sulla scheda Sicurezza.

    4. Fare clic su Aggiungi. Viene visualizzata la finestra di dialogo Seleziona utenti o gruppi.

      Nota

      In Visual Studio viene visualizzata la finestra di dialogo Seleziona utenti, computer o gruppi .

    5. Digitare ASPNET nella casella Immettere i nomi degli oggetti da selezionare e quindi fare clic su OK.

    6. Nella finestra di dialogo Proprietà ApplicationName fare clic sull'utente ASPNET nell'elenco Nomi di gruppo o utente .

    7. In Consenti fare clic per selezionare la casella di controllo Controllo completo e quindi fare clic su OK.

Elenco di codice completo

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

Nota

Il codice generato in Visual Studio è diverso dal codice generato in Visual Studio .NET.

Risoluzione dei problemi

  1. Aprire il fileMachine.config che si trova nel computer nella cartella CONFIG nel percorso in cui è stato installato il runtime.
  2. Trovare la <processModel> sezione nel file Machine.config , modificare gli user attributi e password con il nome e la password dell'utente in cui si vuole eseguire W3wp.exe o Aspnet_wp.exe e quindi salvare il file Machine.config .
  3. Individuare la cartella File ASP.NET temporanei che si trova nella cartella CONFIG . Fare clic con il pulsante destro del mouse sulla cartella File ASP.NET temporanei e quindi scegliere Proprietà.
  4. Nella finestra di dialogo Proprietà file ASP.NET temporanei fare clic sulla scheda Sicurezza .
  5. Fare clic su Avanzate.
  6. Nella finestra di dialogo Impostazioni Controllo di accesso per file ASP.NET temporanei fare clic su Aggiungi.
  7. Nella finestra di dialogo digitare il nome utente nella casella Nome e quindi fare clic su OK.
  8. Nella finestra di dialogo Voce di autorizzazione per file ASP.NET temporanei assegnare all'utente le autorizzazioni complete e quindi fare clic su OK per chiudere la finestra di dialogo Proprietà file ASP.NET temporanei .

Riferimenti