Exporter (0) Imprimer
Développer tout

FileUpload, classe

Remarque : cette classe est nouvelle dans le .NET Framework version 2.0.

Affiche un contrôle de zone de texte et un bouton Parcourir qui permettent aux utilisateurs de sélectionner un fichier à télécharger sur le serveur.

Espace de noms : System.Web.UI.WebControls
Assembly : System.Web (dans system.web.dll)

[ControlValuePropertyAttribute("FileBytes")] 
[ValidationPropertyAttribute("FileName")] 
public class FileUpload : WebControl
/** @attribute ControlValuePropertyAttribute("FileBytes") */ 
/** @attribute ValidationPropertyAttribute("FileName") */ 
public class FileUpload extends WebControl
ControlValuePropertyAttribute("FileBytes") 
ValidationPropertyAttribute("FileName") 
public class FileUpload extends WebControl

La classe FileUpload affiche un contrôle de zone de texte et un bouton Parcourir qui permettent aux utilisateurs de sélectionner un fichier sur le client et le télécharger sur le serveur Web. L'utilisateur spécifie le fichier à sauvegarder en entrant le chemin d'accès complet au fichier sur l'ordinateur local (par exemple, C:\MyFiles\TestFile.txt) dans la zone de texte du contrôle. L'utilisateur peut également sélectionner le fichier en cliquant sur le bouton Parcourir, puis en recherchant le fichier dans la boîte de dialogue Choisir un fichier.

Le contrôle FileUpload n'enregistre pas automatiquement de fichier sur le serveur après la sélection par l'utilisateur du fichier à télécharger. Vous devez explicitement fournir un contrôle ou un mécanisme pour permettre à l'utilisateur d'envoyer le fichier spécifié. Par exemple, vous pouvez fournir un bouton sur lequel l'utilisateur peut cliquer pour télécharger le fichier. Le code que vous écrivez pour enregistrer le fichier spécifié doit appeler la méthode SaveAs qui enregistre le contenu d'un fichier dans un chemin d'accès spécifié sur le serveur. En général, la méthode SaveAs est appelée dans une méthode de gestion d'événements pour un événement qui déclenche une publication sur le serveur. Par exemple, si vous fournissez un bouton pour envoyer un fichier, vous pourriez placer le code pour enregistrer le fichier dans la méthode de gestion d'événements pour l'événement Click.

Avant d'appeler la méthode SaveAs pour enregistrer le fichier sur le serveur, utilisez la propriété HasFile pour vérifier que le contrôle FileUpload contient un fichier. Si HasFile retourne true, appelez la méthode SaveAs. SI elle retourne false, affichez un message à l'utilisateur indiquant que le contrôle ne contient pas de fichier. Ne vérifiez pas la propriété PostedFile pour déterminer l'existence d'un fichier à télécharger, car cette propriété contient 0 octet par défaut. Par conséquent, même si le contrôle FileUpload est vide, la propriété PostedFile retourne une valeur non null.

Lorsque vous appelez la méthode SaveAs, vous devez spécifier le chemin d'accès complet vers le répertoire dans lequel enregistrer le fichier téléchargé. Si vous ne spécifiez pas explicitement de chemin d'accès dans votre code d'application, une exception est levée lorsqu'un utilisateur tente de télécharger un fichier. Ce comportement permet de protéger les fichiers sur le serveur en empêchant les utilisateurs d'écrire aux emplacements arbitraires dans la structure de répertoires de votre application, et en interdisant l'accès aux répertoires racine sensibles.

La méthode SaveAs écrit le fichier téléchargé dans le répertoire spécifié. Par conséquent, l'application ASP.NET doit avoir un accès en écriture au répertoire du serveur. Il existe deux manières pour permettre à l'application d'obtenir un accès en écriture. Vous pouvez accorder explicitement l'accès en écriture au compte sous lequel l'application s'exécute, dans le répertoire dans lequel les fichiers téléchargés seront enregistrés. Vous pouvez également augmenter le niveau de confiance accordé à l'application ASP.NET. Pour obtenir l'accès en écriture au répertoire en cours d'exécution pour l'application, l'objet AspNetHostingPermission doit être accordé à l'application avec AspNetHostingPermissionLevel.Medium comme niveau de confiance. L'augmentation du niveau de confiance augmente l'accès de l'application aux ressources sur le serveur. Notez qu'il ne s'agit pas d'une approche sécurisée, car un utilisateur malveillant qui gagne le contrôle sur votre application sera également capable d'exécuter sous ce niveau supérieur de confiance. Il est conseillé d'exécuter une application ASP.NET dans le contexte d'un utilisateur possédant les privilèges minimaux requis pour l'application à exécuter. Pour plus d'informations sur la sécurité des applications ASP.NET, consultez Méthodes de sécurité de base pour les applications Web et Fichiers de stratégie et niveaux de confiance ASP.NET.

Utilisez la propriété FileName pour obtenir le nom d'un fichier sur un client à télécharger à l'aide du contrôle FileUpload. Le nom de fichier retourné par cette propriété n'inclut pas le chemin d'accès vers le fichier sur le client.

La propriété FileContent obtient un objet Stream qui pointe sur un fichier à télécharger. Utilisez cette propriété pour accéder au contenu sous forme d'octets. Par exemple, vous pouvez utiliser l'objet Stream retourné par la propriété FileContent pour lire le contenu du fichier sous forme d'octets et le stocker dans un tableau d'octets. Vous pouvez également utiliser la propriété FileBytes pour récupérer tous les octets dans le fichier.

La propriété PostedFile obtient l'objet HttpPostedFile sous-jacent du fichier à télécharger. Vous pouvez utiliser cette propriété pour accéder aux propriétés supplémentaires sur le fichier. La propriété ContentLength obtient la longueur du fichier. La propriété ContentType obtient le type de contenu MIME du fichier. De plus, vous pouvez utiliser la propriété PostedFile pour accéder à la propriété FileName, la propriété InputStream et la méthode SaveAs. Toutefois, les mêmes fonctionnalités sont fournies par la propriété FileName, la propriété FileContent et la méthode SaveAs.

Une façon de se protéger contre des attaques par déni de service est de limiter la taille des fichiers qui peuvent être téléchargés à l'aide du contrôle FileUpload. Vous devez définir une limite de taille appropriée aux types de fichiers devant être téléchargés. La limite de taille par défaut est 4096 Ko (4 Mo). Vous pouvez autoriser le téléchargement de fichiers plus volumineux en définissant l'attribut maxRequestLength de l'élément httpRuntime. Pour augmenter la taille de fichier maximale autorisée pour l'application entière, définissez l'attribut maxRequestLength dans le fichier Web.config. Pour augmenter la taille de fichier maximale autorisée pour une page spécifiée, définissez l'attribut maxRequestLength de l'élément location dans le fichier Web.config. Pour obtenir un exemple, consultez location, élément (Schéma des paramètres ASP.NET).

Lors du téléchargement de fichiers volumineux, un utilisateur peut également recevoir le message d'erreur suivant :

aspnet_wp.exe (PID: 1520) was recycled because memory consumption exceeded 460 MB (60 percent of available RAM).

Si les utilisateurs rencontrent ce message d'erreur, augmentez la valeur de l'attribut memoryLimit dans l'élément processModel du fichier Web.config de l'application. L'attribut memoryLimit spécifie la quantité de mémoire maximale qu'un processus de traitement peut utiliser. Si le processus de traitement dépasse la quantité memoryLimit, un nouveau processus est créé pour le remplacer, et toutes les demandes actuelles sont réassignées au nouveau processus.

Pour contrôler si le fichier à télécharger est stocké dans la mémoire temporaire ou sur le serveur pendant le traitement de la demande, définissez l'attribut requestLengthDiskThreshold de l'élément httpRuntime. Cet attribut vous permet de gérer la taille de la mémoire tampon du flux d'entrée. La valeur par défaut est 256 octets. La valeur que vous spécifiez ne doit pas dépasser la valeur que vous spécifiez pour l'attribut maxRequestLength.

RubriqueEmplacement
Comment : télécharger des fichiers avec le contrôle serveur Web FileUploadGénération d'applications Web ASP.NET dans Visual Studio
Comment : définir le focus sur des contrôles serveur Web ASP.NETGénération d'applications Web ASP.NET dans Visual Studio
Comment : télécharger des fichiers avec le contrôle serveur Web FileUploadGénération d'applications Web ASP.NET
Comment : définir le focus sur des contrôles serveur Web ASP.NETGénération d'applications Web ASP.NET
Comment : télécharger des fichiers avec le contrôle serveur Web FileUploadGénération d'applications Web ASP.NET dans Visual Studio
Comment : définir le focus sur des contrôles serveur Web ASP.NETGénération d'applications Web ASP.NET dans Visual Studio

Cette section contient quatre exemples de code :

  • Le premier exemple de code illustre la création d'un contrôle FileUpload qui enregistre des fichiers sur un chemin d'accès spécifié dans le code.

  • Le deuxième exemple de code illustre la création d'un contrôle FileUpload qui enregistre des fichiers dans un répertoire spécifié dans le système de fichiers de l'application.

  • Le troisième exemple de code illustre la création d'un contrôle FileUpload qui enregistre des fichiers sur un chemin d'accès spécifié et limite la taille du fichier qui peut être téléchargé.

  • L'exemple de code quatrième illustre la création d'un contrôle FileUpload qui enregistre des fichiers sur un chemin d'accès spécifié et autorise uniquement le téléchargement des fichiers possédant les extensions .doc ou .xls.

AttentionAttention

Ces exemples de code illustrent la syntaxe de base pour le contrôle FileUpload, mais pas tous les processus de vérification des erreurs nécessaires à terminer avant l'enregistrement d'un fichier. Pour obtenir un exemple complet, consultez SaveAs.

L'exemple de code suivant illustre la création d'un contrôle FileUpload qui enregistre des fichiers sur un chemin d'accès spécifié dans le code. La méthode SaveAs est appelée pour enregistrer le fichier sur le chemin d'accès spécifié sur le serveur.

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server">

  protected void UploadButton_Click(object sender, EventArgs e)
  {
    // Specify the path on the server to
    // save the uploaded file to.
    String savePath = @"c:\temp\uploads\";
 
    // Before attempting to perform operations
    // on the file, verify that the FileUpload 
    // control contains a file.
    if (FileUpload1.HasFile)
    {
      // Get the name of the file to upload.
      String fileName = FileUpload1.FileName;
      
      // Append the name of the file to upload to the path.
      savePath += fileName;
      

      // Call the SaveAs method to save the 
      // uploaded file to the specified path.
      // This example does not perform all
      // the necessary error checking.               
      // If a file with the same name
      // already exists in the specified path,  
      // the uploaded file overwrites it.
      FileUpload1.SaveAs(savePath);
      
      // Notify the user of the name of the file
      // was saved under.
      UploadStatusLabel.Text = "Your file was saved as " + fileName;
    }
    else
    {      
      // Notify the user that a file was not uploaded.
      UploadStatusLabel.Text = "You did not specify a file to upload.";
    }

  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>FileUpload Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <h4>Select a file to upload:</h4>
   
       <asp:FileUpload id="FileUpload1"                 
           runat="server">
       </asp:FileUpload>
            
       <br /><br />
       
       <asp:Button id="UploadButton" 
           Text="Upload file"
           OnClick="UploadButton_Click"
           runat="server">
       </asp:Button>	
       
       <hr />
       
       <asp:Label id="UploadStatusLabel"
           runat="server">
       </asp:Label>        
    </div>
    </form>
</body>
</html>

L'exemple de code suivant illustre la création d'un contrôle FileUpload qui enregistre des fichiers dans un répertoire spécifié dans le système de fichiers de l'application. La propriété HttpRequest.PhysicalApplicationPath est utilisée pour obtenir le chemin d'accès au système de fichiers physique du répertoire racine pour l'application serveur en cours d'exécution. La méthode SaveAs est appelée pour enregistrer le fichier sur le chemin d'accès spécifié sur le serveur.

<%@ Page Language="VB" %>

<html>
<head>

    <script runat="server">
        Sub UploadButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            
            ' Save the uploaded file to an "Uploads" directory
            ' that already exists in the file system of the 
            ' currently executing ASP.NET application.  
            ' Creating an "Uploads" directory isolates uploaded 
            ' files in a separate directory. This helps prevent
            ' users from overwriting existing application files by
            ' uploading files with names like "Web.config".
            Dim saveDir As String = "\Uploads\"
           
            ' Get the physical file system path for the currently
            ' executing application.
            Dim appPath As String = Request.PhysicalApplicationPath
            
            ' Before attempting to save the file, verify
            ' that the FileUpload control contains a file.
            If (FileUpload1.HasFile) Then
                Dim savePath As String = appPath + saveDir + FileUpload1.FileName
                        
                ' Call the SaveAs method to save the 
                ' uploaded file to the specified path.
                ' This example does not perform all
                ' the necessary error checking.               
                ' If a file with the same name
                ' already exists in the specified path,  
                ' the uploaded file overwrites it.
                FileUpload1.SaveAs(savePath)
                
                ' Notify the user that the file was uploaded successfully.
                UploadStatusLabel.Text = "Your file was uploaded successfully."

            Else
                ' Notify the user that a file was not uploaded.
                UploadStatusLabel.Text = "You did not specify a file to upload."
            End If

        End Sub
       
    </script>

</head>
<body>

   <h3>FileUpload Class Example: Save To Application Directory</h3>

   <form ID="Form1" runat="server">
   
       <h4>Select a file to upload:</h4>
   
       <asp:FileUpload id="FileUpload1"                 
           runat="server">
       </asp:FileUpload>
            
       <br><br>
       
       <asp:Button id="UploadButton" 
           Text="Upload file"
           OnClick="UploadButton_Click"
           runat="server">
       </asp:Button>	
       
       <hr />
       
       <asp:Label id="UploadStatusLabel"
           runat="server">
       </asp:Label>       
         
   </form>

</body>
</html>

L'exemple de code suivant illustre la création d'un contrôle FileUpload qui enregistre des fichiers sur un chemin d'accès spécifié dans le code. Le contrôle limite à 5 Mo la taille du fichier qui peut être téléchargé. La propriété PostedFile est utilisée pour accéder à la propriété ContentLength sous-jacente et retourner la taille du fichier. Si la taille du fichier à télécharger est inférieure à 5 Mo, la méthode SaveAs est appelée pour enregistrer le fichier sur le chemin d'accès spécifié sur le serveur. En plus de vérifier le paramètre de taille de fichier maximal de votre code d'application, vous pouvez affecter à l'attribut maxRequestLength de l'élément httpRuntime une taille autorisée maximale dans le fichier de configuration de votre application.

<%@ Page Language="VB" %>

<html>
<head>

    <script runat="server">
        
        Sub UploadButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            
            ' Specify the path on the server to
            ' save the uploaded file to.
            Dim savePath As String = "c:\temp\uploads\"
                       
            ' Before attempting to save the file, verify
            ' that the FileUpload control contains a file.
            If (FileUpload1.HasFile) Then
                
                ' Get the size in bytes of the file to upload.
                Dim fileSize As Integer = FileUpload1.PostedFile.ContentLength
          
                ' Allow only files less than 5,100,000 bytes (approximately 5 MB) to be uploaded.
                If (fileSize < 5100000) Then
                        
                    ' Append the name of the uploaded file to the path.
                    savePath += FileUpload1.FileName

                    ' Call the SaveAs method to save the 
                    ' uploaded file to the specified path.
                    ' This example does not perform all
                    ' the necessary error checking.               
                    ' If a file with the same name
                    ' already exists in the specified path,  
                    ' the uploaded file overwrites it.
                    FileUpload1.SaveAs(savePath)
                
                    ' Notify the user that the file was uploaded successfully.
                    UploadStatusLabel.Text = "Your file was uploaded successfully."
            
                Else
                    ' Notify the user why their file was not uploaded.
                    UploadStatusLabel.Text = "Your file was not uploaded because " + _
                                             "it exceeds the 5 MB size limit."
                End If
                
            Else
                ' Notify the user that a file was not uploaded.
                UploadStatusLabel.Text = "You did not specify a file to upload."
            End If

        End Sub
       
    </script>

</head>
<body>

   <h3>FileUpload Class Example: Check File Size</h3>

   <form ID="Form1" runat="server">
   
       <h4>Select a file to upload:</h4>
   
       <asp:FileUpload id="FileUpload1"                 
           runat="server">
       </asp:FileUpload>
            
       <br><br>
       
       <asp:Button id="UploadButton" 
           Text="Upload file"
           OnClick="UploadButton_Click"
           runat="server">
       </asp:Button>
       
       <hr />
       
       <asp:Label id="UploadStatusLabel"
           runat="server">
       </asp:Label>
                      
   </form>

</body>
</html>

L'exemple de code suivant illustre la création d'un contrôle FileUpload qui enregistre des fichiers sur un chemin d'accès spécifié dans le code. Cet exemple autorise uniquement le téléchargement des fichiers possédant les extensions .doc ou .xls. La méthode Path.GetExtension est appelée pour retourner l'extension du fichier à télécharger. Si le fichier a une extension de .doc ou .xls, la méthode SaveAs est appelée pour enregistrer le fichier sur le chemin d'accès spécifié sur le serveur.

<%@ Page Language="VB" %>

<html>
<head>

    <script runat="server">
        Sub UploadBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            
            ' Specify the path on the server to
            ' save the uploaded file to.
            Dim savePath As String = "c:\temp\uploads\"
            
            ' Before attempting to save the file, verify
            ' that the FileUpload control contains a file.
            If (FileUpload1.HasFile) Then
            
                ' Get the name of the file to upload.
                Dim fileName As String = FileUpload1.FileName
            
                ' Get the extension of the uploaded file.
                Dim extension As String = System.IO.Path.GetExtension(fileName)
            
                ' Allow only files with .doc or .xls extensions
                ' to be uploaded.
                If (extension = ".doc") Or (extension = ".xls") Then
                        
                    ' Append the name of the file to upload to the path.
                    savePath += fileName
            
                    ' Call the SaveAs method to save the 
                    ' uploaded file to the specified path.
                    ' This example does not perform all
                    ' the necessary error checking.               
                    ' If a file with the same name
                    ' already exists in the specified path,  
                    ' the uploaded file overwrites it.
                    FileUpload1.SaveAs(savePath)
                
                    ' Notify the user that their file was successfully uploaded.
                    UploadStatusLabel.Text = "Your file was uploaded successfully."
            
                Else
                    ' Notify the user why their file was not uploaded.
                    UploadStatusLabel.Text = "Your file was not uploaded because " + _
                                             "it does not have a .doc or .xls extension."
                End If
                
            Else
                ' Notify the user that a file was not uploaded.
                UploadStatusLabel.Text = "You did not specify a file to upload."
            End If

        End Sub
       
    </script>

</head>
<body>
    <h3>FileUpload Class Example: Check File Extension</h3>

    <form ID="Form1" runat="server">
   
        <h4>Select a file to upload:</h4>
       
        <asp:FileUpload id="FileUpload1"                 
            runat="server">
        </asp:FileUpload>
            
        <br><br>
       
        <asp:Button id="UploadBtn" 
            Text="Upload file"
            OnClick="UploadBtn_Click"
            runat="server">
        </asp:Button>	
       
        <hr />
       
        <asp:Label id="UploadStatusLabel"
            runat="server">
        </asp:Label>             
         
    </form>

</body>
</html>

  • AspNetHostingPermission  pour exécuter le contrôle FileUpload dans un environnement hébergé. Énumération associée : AspNetHostingPermissionLevel.Minimal
  • AspNetHostingPermission  pour autoriser l'accès en écriture aux répertoires placés sous l'application en cours d'exécution. Énumération associée : AspNetHostingPermissionLevel.Medium

System.Object
   System.Web.UI.Control
     System.Web.UI.WebControls.WebControl
      System.Web.UI.WebControls.FileUpload

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft