Utiliser Visual C# pour charger un fichier sur un site Web

Cet article explique comment charger un fichier à l’aide de Microsoft Visual C#.

Version d’origine du produit : Visual C#, ASP.NET, Internet Information Services
Numéro de la base de connaissances d’origine : 816150

Introduction

Cet article pas à pas explique comment charger un fichier image existant à partir de votre disque dur local vers un site Web. Un contrôle d’entrée est utilisé pour charger une image à partir de votre ordinateur local. Ce fichier en cours de chargement est validé par rapport au serveur pour vous assurer que vous ne remplacez pas un fichier existant qui a déjà été chargé. Le fichier chargé est validé s’il existe sur le serveur. Cet article utilise l’attribut EncType du formulaire pour obtenir la fonctionnalité.

Configuration requise

Cet article suppose que vous êtes familiarisé avec les rubriques suivantes :

  • Applications Web
  • ASP.NET

La liste suivante décrit les logiciels et l’infrastructure réseau recommandés dont vous avez besoin :

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

Créer un formulaire web ASP.NET

  1. Démarrez Visual Studio .NET ou Visual Studio.

  2. On the File menu, point to New, and then click Project.

    Remarque

    Dans Visual Studio, pointez sur Nouveau dans le menu Fichier , puis cliquez sur Site web.

  3. Sous Types de projets, cliquez sur Projets Visual C#. Sous Modèles, cliquez sur ASP.NET application web.

    Remarque

    Dans Visual Studio, sélectionnez Visual C# à droite de Langage. Sous Modèles, cliquez sur ASP.NET site web.

  4. Dans la zone Emplacement , tapez l’emplacement suivant, puis cliquez sur OK :
    http://WebServerName/ApplicationName

    Remarque

    WebServerName est un espace réservé pour le nom de votre serveur Web. ApplicationName est un espace réservé pour le nom de votre application.

    WebForm1.aspx s’affiche par défaut.

    Remarque

    Dans Visual Studio, sélectionnez HTTP à droite de Emplacement, puis tapez <http://WebServerName>.

  5. Dans le menu Affichage , cliquez sur Source HTML.

    Remarque

    Dans Visual Studio, cliquez sur Code dans le menu Affichage .

Modifier les attributs du formulaire

Dans la fenêtre HTML de WebForm1, remplacez la balise de formulaire par ce qui suit :

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

L’attribut EncType spécifie le format des données publiées. Le navigateur utilise cet attribut pour encoder les informations publiées sur le serveur. L’attribut action dans ce code spécifie que la page traitera la demande. Par défaut, l’attribut de méthode du formulaire est défini sur publication afin que vous puissiez envoyer de grandes quantités de données dans la transaction.

Ajoutez le contrôle Input pour spécifier le fichier que vous souhaitez charger sur le serveur

  1. Dans la fenêtre HTML de WebForm1, ajoutez le code suivant entre les balises d’ouverture et de fermeture <form> :

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

    Ce contrôle d’entrée spécifie le fichier que vous souhaitez charger sur le serveur.

  2. Vous pouvez ajouter une chaîne de texte devant le contrôle pour inviter l’utilisateur. Tapez le texte suivant devant le contrôle Entrée dans la fenêtre HTML de WebForm1 :

    Sélectionnez le fichier image à charger sur le serveur :

Ajouter un contrôle Button

  1. Dans la fenêtre HTML de WebForm1, ajoutez le code suivant entre les balises d’ouverture et de fermeture <form> , après le code de contrôle d’entrée :

    <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
    
  2. Ce contrôle Button est utilisé pour charger le fichier que vous avez spécifié dans le contrôle Entrée.

Créer un contrôle Panel qui contient une seule étiquette pour afficher la sortie

Dans la fenêtre HTML de WebForm1, ajoutez le code suivant entre les balises d’ouverture et de fermeture <form> , après le code de contrôle Button :

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

Ce code est utilisé pour afficher le message pour indiquer si le chargement du fichier a réussi. Pour afficher cette sortie, un contrôle Panel qui contient une seule étiquette est créé.

Charger le fichier sur l’événement Button Click

Le code de cette section récupère le fichier à partir du système de fichiers local, vérifie si le fichier existe déjà sur le serveur, puis le charge sur le site Web. Pour ajouter ce code, procédez comme suit :

  1. Double-cliquez sur le bouton Charger créé dans la section Ajouter un contrôle Button de cet article pour créer un gestionnaire d’événements pour l’événement Click du contrôle bouton.

  2. Ajoutez le code suivant en haut de la fenêtre Code :

    using System.IO;
    
  3. Ajoutez le code suivant au gestionnaire d’événements Click pour le bouton Charger :

    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. Dans le menu Fichier, cliquez sur Enregistrer tout.

Vérifier que l’action de chargement fonctionne

  1. Dans le menu Déboguer , cliquez sur Démarrer pour générer et exécuter l’application. Une zone de texte et un bouton de commande s’affichent.

  2. Tapez le chemin d’accès du fichier image dans la zone de texte ou cliquez sur Parcourir pour localiser le fichier image sur votre ordinateur local.

  3. Cliquez sur Charger pour envoyer le fichier au serveur. Si le fichier est unique, vous recevez un message indiquant que le chargement a réussi. Si le fichier existe déjà sur le serveur, vous recevez un message approprié. Les fichiers que vous chargez à partir de cette application sont enregistrés à l’emplacement : C:\inetpub\wwwroot\ApplicationName sur le disque dur local.

  4. Pour que cette application fonctionne dans le .NET Framework, autorisez l’accès contrôle total à l’utilisateur ASPNET . Pour cela, procédez comme suit :

    1. Recherchez le dossier de l’application dans Windows Explorer. Le chemin d’accès est C:\inetpub\wwwroot\ApplicationName.

    2. Cliquez avec le bouton droit sur le dossier ApplicationName , puis cliquez sur Propriétés. La boîte de dialogue Propriétés du nom de l’application s’affiche.

    3. Cliquez sur l’onglet Sécurité.

    4. Cliquez sur Ajouter. La boîte de dialogue Sélectionner des utilisateurs ou des groupes s’affiche.

      Remarque

      Dans Visual Studio, la boîte de dialogue Sélectionner des utilisateurs, des ordinateurs ou des groupes s’affiche .

    5. Tapez ASPNET dans la zone Entrez les noms d’objets à sélectionner , puis cliquez sur OK.

    6. Dans la boîte de dialogue Propriétés du nom de l’application , cliquez sur l’utilisateur ASPNET dans la liste Noms de groupe ou d’utilisateur .

    7. Sous Autoriser, cliquez pour sélectionner la zone Contrôle total case activée, puis cliquez sur OK.

Liste complète du code

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

Remarque

Le code généré dans Visual Studio est différent du code généré dans Visual Studio .NET.

Résolution des problèmes

  1. Ouvrez le fichier Machine.config qui se trouve sur votre ordinateur dans le dossier CONFIG sous le chemin d’accès où vous avez installé le runtime.
  2. Recherchez la <processModel> section dans le fichier Machine.config , remplacez les userpassword attributs et par le nom et le mot de passe de l’utilisateur sous lequel vous souhaitez que W3wp.exe ou Aspnet_wp.exe s’exécutent, puis enregistrez le fichier Machine.config .
  3. Recherchez le dossier Temporary ASP.NET Files qui se trouve dans le dossier CONFIG . Cliquez avec le bouton droit sur le dossier Fichiers ASP.NET temporaires , puis cliquez sur Propriétés.
  4. Dans la boîte de dialogue Propriétés des fichiers ASP.NET temporaires , cliquez sur l’onglet Sécurité .
  5. Cliquez sur Avancé.
  6. Dans la boîte de dialogue Paramètres Access Control pour les fichiers ASP.NET temporaires, cliquez sur Ajouter.
  7. Dans la boîte de dialogue, tapez le nom d’utilisateur dans la zone Nom , puis cliquez sur OK.
  8. Dans la boîte de dialogue Entrée d’autorisation pour les fichiers ASP.NET temporaires , accordez à l’utilisateur toutes les autorisations, puis cliquez sur OK pour fermer la boîte de dialogue Propriétés des fichiers ASP.NET temporaires .

References