Cette section décrit les deux méthodes utilisées dans ASP.NET pour télécharger des fichiers sur des pages Web.
ASP.NET comprend deux contrôles qui permettent aux utilisateurs de télécharger des fichiers sur le serveur Web. Une fois que le serveur accepte les données du fichier téléchargé, l'application peut les enregistrer, les inspecter ou les ignorer. Le contrôle suivant permet le téléchargement de fichiers :
HtmlInputFile - Contrôle serveur HTML
FileUpload - Contrôle Web ASP.NET
Les deux contrôles autorisent le téléchargement de fichiers, mais le contrôle FileUpload définit automatiquement le format d’encodage, contrairement au contrôle HtmlInputFile.
Dans ce tutoriel, nous utiliserons le contrôle FileUpload. Ce contrôle permet à l'utilisateur de prévisualiser le fichier sélectionné à télécharger. Il fournit un bouton d'aperçu et une zone de texte dans laquelle le nom du fichier peut être saisi.
Une fois que l'utilisateur saisit un nom de fichier dans la zone de texte ou prévisualise le fichier, la méthode SaveAs du contrôle FileUpload enregistre le fichier sur le disque dur.
La syntaxe de base de FileUpload est la suivante :
<asp:FileUpload ID= "Uploader" runat = "server" />
La classe FileUpload est dérivée de la classe WebControl et hérite de tous ses éléments. La classe FileUpload possède ces propriétés en lecture seule :
propriété | décrire |
---|---|
Octets de fichier | Renvoie un ensemble de bytecodes pour le fichier à télécharger |
Contenu du fichier | Renvoie l'objet flux du fichier à télécharger |
Nom de fichier | Renvoie le nom du fichier qui sera téléchargé |
HasFile | Déterminer si le contrôle a des fichiers à télécharger |
Fichier publié | Renvoie une référence au fichier téléchargé |
Le fichier publié est encapsulé dans un objet sous la forme de HttpPostedFile, accessible via la propriété PostedFile de la classe FileUpload.
La classe HttpPostedFile possède les propriétés suivantes couramment utilisées :
propriété | décrire |
---|---|
ContenuLongueur | Renvoie la taille en octets du fichier téléchargé |
Type de contenu | Renvoie le type MIME du fichier téléchargé |
Nom de fichier | Renvoie le nom complet du fichier |
Flux d'entrée | Renvoie l'objet flux du fichier à télécharger |
L'exemple suivant illustre le contrôle FileUpload et ses propriétés. Ce formulaire comporte un contrôle FileUpload ainsi qu'un bouton Enregistrer et un contrôle d'étiquette avec le nom, le type et la longueur réels du fichier.
En mode conception, le tableau ressemble à ceci :
Les codes de fichiers pertinents sont répertoriés ci-dessous :
<body> <form id="form1" runat="server"> <div> <h3> File Upload:</h3> <br /> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /><br /> <asp:Button ID="btnsave" runat="server" onclick="btnsave_Click" Text="Save" /> <br /><br /> <asp:Label ID="lblmessage" runat="server" /> </div> </form></body>
Le code du bouton Enregistrer est répertorié ci-dessous :
protected void btnsave_Click(object sender, EventArgs e){ StringBuilder sb = new StringBuilder(); if (FileUpload1.HasFile) { try { sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName); //saving the file FileUpload1.SaveAs("<c:\SaveDirectory>" + FileUpload1.FileName); //Showing the file information sb.AppendFormat("<br/> Save As: {0}", FileUpload1.PostedFile.FileName); sb.AppendFormat("<br/> File type: {0}", FileUpload1.PostedFile.ContentType); sb.AppendFormat("<br/> File length: {0}", FileUpload1.PostedFile.ContentLength); sb.AppendFormat("<br/> File name: {0}", FileUpload1.PostedFile.FileName); }catch (Exception ex) { sb.Append("<br/> Error <br/>"); sb.AppendFormat("Unable to save file <br/> {0}", ex.Message); } } else { lblmessage.Text = sb.ToString(); }}
Faites attention aux problèmes suivants :
La classe StringBuilder est générée à partir de l'espace de noms System.IO, elle doit donc être incluse.
Les zones try and catch sont utilisées pour détecter les erreurs et afficher les messages d'erreur.