Pour vous procurer une version Microsoft Visual C# .NET de cet article, reportez-vous à .

DANS CETTE TÂCHE

Résumé

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

Retour au début

Création de l'application ASP.NET

Dans Microsoft Visual Studio .NET, procédez comme suit pour créer une nouvelle application pour transférer des fichiers vers 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 Basic sous Types de projets, puis cliquez sur Application Web ASP.NET sous Modèles.

  4. Dans la zone Emplacement, tapez l'URL de création du projet. Pour cet exemple, tapez http://localhost/VBNetUpload, ce qui crée le nom de projet par défaut VBNetUpload. Notez que le fichier WebForm1.aspx se charge dans le mode Design de Visual Studio .NET.

Retour au début

Création du répertoire Data

Après avoir créé l'application, vous créez le répertoire Data qui contiendra les fichiers transférés. Après avoir créé ce répertoire, vous devez également définir des droits d'accès en écriture pour le compte de travail ASPNET.

  1. Dans l'Explorateur de solutions de Visual Studio .NET, cliquez avec le bouton droit sur VBNetUpload, pointez sur Ajouter, puis cliquez sur Nouveau dossier. Par défaut, un nouveau dossier nommé Nouveaudossier1 est créé.

  2. Pour assigner au dossier le nom « Data », cliquez avec le bouton droit sur Nouveaudossier1, cliquez sur Renommer, puis tapez Data.

  3. Démarrez l'Explorateur Windows, puis recherchez le dossier de système de fichiers Data que vous avez créé à l'étape 2. Par défaut, ce dossier se trouve dans le dossier suivant :

    C:\Inetpub\wwwroot\VBNetUpload\Data

  4. Pour modifier les paramètres de sécurité de façon à accorder des droits d'accès en écriture sur le répertoire Data, cliquez avec le bouton droit sur Data, puis cliquez sur Propriétés.

  5. Dans la boîte de dialogue Propriétés de Data, cliquez sur l'onglet Sécurité, puis cliquez sur Ajouter.

  6. Dans la boîte de dialogue Sélectionnez Utilisateurs ou groupes, cliquez sur le compte ASPNET, puis cliquez sur Ajouter. Cliquez sur OK pour fermer la boîte de dialogue Sélectionnez Utilisateurs ou groupes.

  7. Cliquez sur le compte aspnet_wp account (nom_ordinateur\ASPNET) ou sur le compte Service Réseau si vous utilisez Microsoft Internet Information Services (IIS) 6.0, puis activez la case à cocher Autoriser pour les autorisations suivantes :

    • Lecture et exécution

    • Affichage du contenu du dossier

    • Lecture

    • Écriture


    Désactivez toutes les autres cases à cocher Autoriser et Refuser.

  8. Cliquez sur OK pour fermer la boîte de dialogue Propriétés de Data. Vous avez modifié les autorisations du répertoire Data afin d'accepter les fichiers transférés par l'utilisateur.

Retour au début

Modification de la page WebForm1.aspx

Pour modifier le code HTML du fichier WebForm1.aspx de façon à permettre aux utilisateurs de transférer des fichiers, procédez comme suit :

  1. Revenez à l'instance ouverte de Visual Studio .NET. WebForm1.aspx doit être ouvert dans la fenêtre Création.

  2. Pour afficher la source HTML de la page WebForm1.aspx, cliquez avec le bouton droit sur WebForm1.aspx dans la fenêtre Création, 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. Ajoutez l'attribut nom-valeur enctype="multipart/form-data" à la balise <form> comme suit :

    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
  5. Après la balise <form> d'ouverture, 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 la balise HTML <form> 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>

Retour au début

Ajout du code de transfert au fichier code-behind WebForm1.aspx.vb

Pour modifier le fichier code-behind WebForm1.aspx.vb afin qu'il accepte les données transférées, procédez comme suit :

  1. Dans le menu Affichage, cliquez sur Création.

  2. Double-cliquez sur Transférer. Visual Studio ouvre le fichier code-behind WebForm1.aspx.vb et génère automatiquement le code de méthode suivant :

    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick

    End Sub
  3. Vérifiez que le code suivant existe au niveau classe du fichier WebForm1.vb :

    Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
    Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile

    Si ce code n'existe pas dans le fichier, ajoutez-le après la ligne suivante :

    Inherits System.Web.UI.Page
  4. Recherchez le code suivant :

    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
  5. Appuyez sur ENTRÉE pour ajouter une ligne vierge, puis ajoutez le code suivant :

    If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then

    Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
    Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
    Try
    File1.PostedFile.SaveAs(SaveLocation)
    Response.Write("The file has been uploaded.")
    Catch Exc As Exception
    Response.Write("Error: " & Exc.Message)
    End Try
    Else
    Response.Write("Please select a file to upload.")
    End If

    Ce code vérifie d'abord qu'un fichier a été transféré. Si aucun fichier n'a été sélectionné, vous recevez le message « Please select a file to upload ». Si un fichier valide est transféré, son nom de fichier est extrait en utilisant l'espace de noms System.IO et sa destination est assemblée dans un chemin d'accès SaveAs. Une fois la destination finale connue, le fichier est enregistré à l'aide de la méthode File1.PostedFile.SaveAs. Toute exception est interceptée et le message d'exception est affiché à l'écran.

  6. Vérifiez que la sous-routine Submit1 apparaît comme suit :

    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
    If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
    Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
    Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
    Try
    File1.PostedFile.SaveAs(SaveLocation)
    Response.Write("The file has been uploaded.")
    Catch Exc As Exception
    Response.Write("Error: " & Exc.Message)
    End Try
    Else
    Response.Write("Please select a file to upload.")
    End If
    End Sub

Retour au début

Test de 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 que WebForm1.aspx s'est ouvert dans le navigateur, cliquez sur Parcourir.

  4. Dans la boîte de dialogue Choisir un fichier, sélectionnez un fichier de taille inférieure à 4 mégaoctets (Mo), puis cliquez sur Ouvrir.

  5. Pour télécharger le fichier, cliquez sur Transférer. Notez que le fichier est transféré vers le serveur Web et que vous recevez le message « The file has been uploaded ».

  6. Revenez à l'instance ouverte de l'Explorateur Windows, puis recherchez le répertoire Data.

  7. Vérifiez que le fichier a été transféré vers le répertoire Data.

Retour au début

Transfert de fichiers plus volumineux

Par défaut, ASP.NET autorise uniquement le transfert de fichiers de taille inférieure à 4 096 kilo-octets (Ko) (ou 4 mégaoctets [Mo]) vers le serveur Web. Pour transférer de plus grands fichiers, vous devez modifier le paramètre maxRequestLength de la section <httpRuntime> du fichier Web.config.

Remarque Lorsque l'attribut maxRequestLength est défini dans le fichier Machine.config et qu'une demande (par exemple un transfert de fichiers) dépassant la valeur de maxRequestLength est publiée, une page d'erreur personnalisée ne peut pas être affichée. Au lieu de cela, Microsoft Internet Explorer affichera un message d'erreur « Impossible de trouver le serveur ou erreur DNS ».

Si vous souhaitez modifier ce paramètre pour tous les ordinateurs et pas simplement pour cette application ASP.NET, vous devez modifier le fichier Machine.config.

Par défaut, l'élément <httpRuntime> a les paramètres suivants dans le fichier Machine.config :

<httpRuntime 
executionTimeout="90"
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>

Le fichier Machine.config se trouve dans le dossier \racine_système\Microsoft.NET\Framework\numéro_version\Config.

Retour au début

Code complet

WebForm1.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="VBNetUpload.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.0">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
<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" enctype="multipart/form-data" method="post" 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>

Retour au début

WebForm1.aspx.vb

Public Class WebForm1
Inherits System.Web.UI.Page
Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton

#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
End Sub

Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick

If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
File1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End If

End Sub
End Class

Retour au début

Plus d'informations

En théorie, la taille de transfert de fichier maximale est relativement élevée. Toutefois, en raison du contrôle d'état ASP.NET, vous ne pouvez pas transférer de fichiers très volumineux 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 à cause du contrôle d'état et de la fragmentation de mémoire.

Durant le processus de transfert, 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 être recyclé à cause de l'attribut memoryLimit de la balise processModel du fichier Machine.config. L'attribut memoryLimit spécifie le pourcentage de mémoire physique que le processus de travail ASP.NET peut épuiser avant que le processus soit recyclé automatiquement. Le recyclage empêche les fuites de mémoire de provoquer le blocage d'ASP.NET.

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


Remarque Vous pouvez transférer des fichiers de plus de 100 Mo dans ASP.NET. Toutefois, Microsoft vous recommande de respecter les tailles de transfert de fichier maximales qui sont mentionnées dans cet article. Pour déterminer les tailles de fichiers de manière plus précise, exécutez des tests de stress sur des ordinateurs semblables à ceux qui seront utilisés dans la production.

Vous pouvez recevoir les messages d'erreur suivants si vous rencontrez des limites de taille de fichier durant le processus de transfert de fichiers :

  • Impossible d'afficher la page.

  • Application serveur non disponible.

    Dans le journal des événements, le message d'erreur ressemblera au suivant :

  • Une exception de type System.OutOfMemoryException a été levée.

Vous pouvez constater également que les transferts sont très lents. Si vous observez 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 recyclage du processus de travail ASP.NET à cause d'une erreur responseDeadlock.

Références

Pour plus d'informations, reportez-vous aux sites Web MSDN (Microsoft Developer Network) aux adresses suivantes (en anglais) :

Retour au début

Besoin d’aide ?

Développez vos compétences

Découvrez des formations >

Accédez aux nouvelles fonctionnalités en avant-première

Rejoindre Microsoft Insider >

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?

Nous vous remercions de vos commentaires.

×