Comment transférer un fichier sur un serveur Web dans ASP.NET à l'aide de Visual c# .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 323246 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article étape par étape décrit comment transférer un fichier sur un serveur Web à l'aide de Visual c# .NET. Dans cet article, vous créez un fichier Microsoft ASP.NET (WebForm1.aspx) et son fichier code-behind connexe (WebForm1.aspx.cs) pour transférer des fichiers vers un répertoire nommé données.


Création d'une application ASP.NET

Dans Visual Studio .NET, procédez comme suit pour créer une nouvelle application télécharger des fichiers sur le serveur Web :
  1. Démarrez Microsoft Visual Studio .NET.
  2. Dans le menu fichier , pointez sur Nouveau , puis cliquez sur projet .
  3. Dans la boîte de dialogue Nouveau projet , cliquez sur Projets Visual c# sous Types de projets et puis cliquez sur Application Web ASP.NET sous modèles .
  4. Dans la zone emplacement , tapez l'URL pour créer le projet. Dans cet exemple, tapez http://localhost/CSharpUpload qui crée le nom de projet par défaut de CSharpUpload. Notez que le fichier WebForm1.aspx se charge dans le mode Concepteur de Visual Studio .NET.

Créer le répertoire de données

Une fois que vous créez l'application, vous créez le répertoire Data qui accepte les fichiers téléchargés. Après avoir créé ce répertoire, vous devez également définir des autorisations d'écriture pour le compte de travail ASPNET.
  1. Dans la fenêtre Explorateur de solutions de Visual Studio .NET, cliquez avec le bouton droit sur CSharpUpload , pointez sur Ajouter et cliquez sur Nouveau dossier . Par défaut, un nouveau dossier nommé Nouveaudossier1 est créé.
  2. Pour changer le nom du dossier Data, cliquez avec le bouton droit sur Nouveaudossier1 , cliquez sur Renommer et tapez Data .
  3. Démarrez l'Explorateur Windows et recherchez le dossier de système de fichier de données que créé dans étape 2. Par défaut, ce dossier se trouve dans le dossier suivant :
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Pour modifier la sécurité paramètres pour accorder écrire autorisations dans le répertoire de données, cliquez avec le bouton droit sur données , puis cliquez sur Propriétés .
  5. Dans la boîte de dialogue Propriétés de données , cliquez sur l'onglet sécurité et cliquez sur Ajouter .
  6. Dans la boîte de dialogue Sélectionnez utilisateurs ou groupes , cliquez sur le compte ASPNET et puis cliquez sur Ajouter . Cliquez sur OK pour fermer la boîte de dialogue Sélectionnez utilisateurs ou groupes .
  7. Cliquez sur le aspnet_wp account (computername \ASPNET) compte, puis cliquez sur activez les cases à cocher Autoriser pour les autorisations suivantes :

    • lecture et exécution
    • Afficher le contenu du dossier
    • lecture
    • écriture

    Cliquez pour effacer toutes les autres Autoriser et Refuser cases à cocher.
  8. Cliquez sur OK pour fermer la boîte de dialogue Propriétés de données . Vous avez modifié avec succès les autorisations de répertoire données pour accepter les fichiers utilisateur téléchargé.

Modifier la page WebForm1.aspx

Pour modifier le code HTML du fichier WebForm1.aspx pour permettre aux utilisateurs de télécharger des fichiers, procédez comme suit :
  1. Revenir à l'instance ouverte de Visual Studio .NET. WebForm1.aspx doit être ouvert dans la fenêtre du concepteur.
  2. Pour afficher la source HTML de la page WebForm1.aspx, cliquez avec le bouton droit sur WebForm1.aspx dans la fenêtre du Concepteur de, puis cliquez sur Afficher la source HTML .
  3. Recherchez le code HTML suivant, qui contient la balise <form> :
    <form id="Form1" method="post" runat="server">
    					
  4. Ajouter le enctype = "multipart/form-data" attribut nom-valeur pour la balise <form> comme suit :
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    					
  5. Après l'ouverture <form> balise, ajoutez le code suivant :
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    					
  6. Vérifiez que le HTML <form> balise apparaît comme suit :
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    </form>
    					

Ajoutez le code de téléchargement au fichier code-behind WebForm1.aspx.cs

Pour modifier le fichier code-behind WebForm1.aspx.cs afin qu'il accepte les données téléchargées, procédez comme suit :
  1. Dans le menu affichage , cliquez sur Création .
  2. Double-cliquez sur Télécharger . Visual Studio ouvre le fichier code-behind WebForm1.aspx.cs et génère automatiquement le code de méthode suivant:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    
    
    }
  3. Vérifiez que le code suivant existe au niveau du fichier WebForm1.cs de la classe :
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;
    protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
    						
    si ce code n'existe pas dans le fichier, ajoutez le code dans le fichier après la ligne suivante :
    public class WebForm1 : System.Web.UI.Page
    {
    					
  4. Recherchez le code suivant :
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    					
  5. Appuyez sur ENTRÉE pour ajouter une ligne vide, puis ajoutez le code suivant :
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    {
    	string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    	string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
    	try
    	{
    		File1.PostedFile.SaveAs(SaveLocation);
    		Response.Write("The file has been uploaded.");
    	}
    	catch ( Exception ex )
    	{
    		Response.Write("Error: " + ex.Message);
    		//Note: Exception.Message returns a detailed message that describes the current exception. 
    		//For security reasons, we do not recommend that you return Exception.Message to end users in 
    		//production environments. It would be better to put a generic error message. 
    	}
    }
    else
    {
    	Response.Write("Please select a file to upload.");
    }
    ce code vérifie d'abord qu'un fichier a été téléchargé. Si aucun fichier n'a été sélectionné, vous recevez le message «Sélectionnez un fichier à télécharger». Si un fichier valide est téléchargé, son nom de fichier est extrait à l'aide de l'espace de noms System.IO et sa destination est assemblée dans un chemin SaveAs . Une fois la destination finale est connue, le fichier est enregistré à l'aide de la méthode file1.PostedFile.SaveAs . Une exception est interceptée et le message d'exception s'affiche à l'écran.
  6. Vérifiez que la sous-routine Submit1 apparaît comme suit :
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    	if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    	{
    		string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    		string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
    		try
    		{
    			File1.PostedFile.SaveAs(SaveLocation);
    			Response.Write("The file has been uploaded.");
    		}
    		catch ( Exception ex )
    		{
    			Response.Write("Error: " + ex.Message);
    			//Note: Exception.Message returns detailed message that describes the current exception. 
    			//For security reasons, we do not recommend you return Exception.Message to end users in 
    			//production environments. It would be better just to put a generic error message. 
    		}
    	}
    	else
    	{
    		Response.Write("Please select a file to upload.");
    	}
    }

Tester l'application

Pour générer votre solution Visual Studio .NET et tester l'application, procédez comme suit :
  1. Dans le menu Générer , cliquez sur Générer la solution .
  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur WebForm1.aspx , puis cliquez sur afficher dans le navigateur .
  3. Une fois WebForm1.aspx s'ouvre dans le navigateur, cliquez sur Parcourir .
  4. Dans la boîte de dialogue Fichier , sélectionnez un fichier qui est inférieur à 4 mégaoctets (Mo) et cliquez sur Ouvrir .
  5. Pour télécharger le fichier, cliquez sur Télécharger . Notez que le fichier transfère vers le serveur Web et que vous recevez le message «le fichier a été téléchargé».
  6. Revenir à l'instance ouverte de l'Explorateur Windows et recherchez le répertoire de données.
  7. Vérifiez que le fichier a été téléchargé vers les données d'annuaire.

Télécharger des fichiers de grande taille

Par défaut, ASP.NET autorise uniquement les fichiers de 4 096 kilo-octets (Ko) (ou 4 Mo) ou moins à télécharger sur le serveur Web. Pour télécharger des fichiers de grande taille, vous devez modifier le paramètre maxRequestLength de la <httpruntime> section dans le fichier Web.config.

Remarque Lorsque l'attribut maxRequestLength est définie dans le fichier machine.config et ensuite une demande est validée (par exemple, un téléchargement de fichier) qui dépasse la valeur maxRequestLength , une page d'erreur personnalisée ne peut pas être affichée. Au lieu de cela, Microsoft Internet Explorer affiche un message d'erreur «Impossible de trouver le serveur ou DNS».

Si vous souhaitez modifier ce paramètre pour tous les de l'ordinateur et pas uniquement cette application ASP.NET, vous devez modifier le fichier machine.config fichier.

Par défaut, le <httpruntime> élément a les paramètres suivants dans le fichier machine.config fichier :
<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
				
machine.config le fichier se trouve dans le \ répertoire \Config de System Root \Microsoft.NET\Framework\ Version Number.


Liste de code complet

WebForm1.aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CSharpUpload.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
    <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" enctype="multipart/form-data" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" >
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" NAME="Submit1">
</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;

namespace CSharpUpload
{
	/// <summary>
	/// Summary description for WebForm1.
	/// </summary>
	public class WebForm1 : System.Web.UI.Page
	{
		protected System.Web.UI.HtmlControls.HtmlInputFile File1;
		protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
	
		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.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		private void Submit1_ServerClick(object sender, System.EventArgs e)
		{
			if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
			{
				string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
				string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
				try
				{
					File1.PostedFile.SaveAs(SaveLocation);
					Response.Write("The file has been uploaded.");
				}
				catch ( Exception ex )
				{
					Response.Write("Error: " + ex.Message);
					//Note: Exception.Message returns a detailed message that describes the current exception. 
					//For security reasons, we do not recommend that you return Exception.Message to end users in 
					//production environments. It would be better to return a generic error message. 
				}
			}
			else
			{
				Response.Write("Please select a file to upload.");
			}
		}
	}
}
	

Plus d'informations

En théorie, la taille de téléchargement maximale de fichier est assez grande. Toutefois, en raison de contrôle d'état ASP.NET, vous ne peut pas télécharger des fichiers très volumineuses dans ASP.NET. Le processus de travail ASP.NET a un espace d'adressage virtuel de 2 gigaoctets (Go). Toutefois, le processus de travail ASP.NET utilise seulement un peu plus de 1 Go en raison de fonctionnement Surveillance et la mémoire la fragmentation.

Pendant le processus de téléchargement, ASP.NET charge le fichier entier en mémoire avant que l'utilisateur puisse enregistrer le fichier sur le disque. Par conséquent, le processus peut recycler en raison de l'attribut memoryLimit de la balise processModel dans le fichier machine.config. L'attribut memoryLimit Spécifie le pourcentage de mémoire physique qui traitent le thread de travail ASP.NET peut épuiser avant que le processus soit recyclé automatiquement. Recyclage empêche le à l'origine ASP.NET tomber en panne ou cesse de répondre fuites de mémoire.

En outre, d'autres facteurs jouent un rôle de la taille maximale de fichier qui peut être téléchargée. Ces facteurs incluent la mémoire disponible, espace disque disponible, la vitesse du processeur et le trafic réseau en cours. Avec un trafic normal des fichiers en cours de téléchargement, Microsoft recommande d'utiliser une taille de fichier maximale de la plage de 10 à 20 mégaoctets (Mo). Si vous transférez rarement des fichiers, la taille maximale de fichier peut être 100 Mo.

Remarque Vous pouvez télécharger les fichiers supérieurs à 100 Mo dans ASP.NET. Toutefois, Microsoft recommande de suivre les tailles de téléchargement maximale des fichiers mentionnés dans cet article. Pour déterminer plus précises tailles de fichier, exécutez stress test sur les ordinateurs qui sont semblables à celles qui seront utilisés en production.

Vous pouvez remarquer les messages d'erreur suivants si vous rencontrez les limites de taille de fichier au cours le processus de téléchargement de fichier :
  • Impossible d'afficher la page.
  • Application serveur n'est pas disponible
    Dans le journal des événements, le message d'erreur sera semblable au suivant :

    aspnet_wp.exe (PID: PIDNumber) a été recyclé, car la consommation de mémoire dépassait SizeLimit Mo (% Percentage de mémoire VIVE disponible).

  • Exception de type System.OutOfMemoryException a été levée.
Vous pouvez également trouver que les téléchargements se produisent très lentement. Si vous regardez le processus aspnet_wp.exe dans le Gestionnaire des tâches de Windows, vous remarquerez que le delta de mémoire change de 64 Ko toutes les 1 à 2 secondes. Selon la taille du fichier, ce délai peut provoquer le processus de travail ASP.NET à la Corbeille en raison d'une erreur responseDeadlock.

Références

Pour plus d'informations, reportez-vous aux sites suivants Microsoft Developer Network (MSDN) Web aux adresses ;
élément <httpruntime>
http://msdn2.microsoft.com/en-us/library/e1f13641(vs.71).aspx

Élément d'information | objet d'entrée
http://msdn.microsoft.com/en-us/library/ms535260(VS.85).aspx

Attribut ENCTYPE | propriété enctype
http://msdn2.microsoft.com/en-us/library/ms533745.aspx

Classe HtmlInputFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile(vs.71).aspx

Propriété HtmlInputFile.PostedFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile.postedfile(vs.71).aspx

Propriétés

Numéro d'article: 323246 - Dernière mise à jour: lundi 21 mai 2007 - Version: 5.11
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Initiation
Mots-clés : 
kbmt kbhowtomaster KB323246 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 323246
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com