ASP.NET – Permettre à l’utilisateur de télécharger un fichier
Quelques notes à propos de la récupération (download) d’un fichier par l’utilisateur.
Soit une page aspx contenant un bouton nommé Ouvrir. ce bouton permet à l’utilisateur d’ouvrir un document situé sur le serveur.
La façon habituelle de procéder consiste à créer un fichier joint à la réponse retournée par le serveur. Une fois cette réponse reçue par le browser, ce dernier demande généralement à l’utilisateur s’il veut ouvrir ou enregistrer le fichier joint. Si l’utilisateur choisi d’ouvrir le fichier, ce dernier est affiché dans une nouvelle fenêtre (ou un nouvel onglet).
À retenir :
- Pour forcer le browser à proposer à l’utilisateur d’ouvrir le fichier dans une nouvelle fenêtre ou de le sauvegarder, il faut spécifier le mot-clé “attachement” dans la section “content-disposition” de l’en-tête de la page (voir code ci-dessous). Si ce mot-clé n’est pas présent, le browser tentera lui-même d’afficher le contenu du fichier à la place de la page en cours – ce qui est généralement une mauvaise idée : après avoir consulté le contenu du document, l’utilisateur ferme généralement la fenêtre (ou l’onglet) qui le contient. Il s’aperçoit ensuite seulement qu’il aurait dû faire “Précédent”.
- Conservation du nom du fichier. Par défaut, le nom du fichier est encodé (par exemple, Sélection.docx devient SÂclection.docx). Pour s’assurer que le browser interprétera correctement le nom du fichier, il faut prendre soin de l’encoder d’abord avec Server.UrlEncode (voir code ci-dessous).
Code VB.NET :
Protected Sub buttonOpenDoc_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonOpenDoc.Click
Dim document = LireDocument( ….. )
‘ Préparer la réponse :
Page.Response.Clear()
Page.Response.ContentType = Document.TypeFichier
Page.Response.AddHeader(”content-disposition”, “attachment; filename=” & Server.UrlEncode(document.Nom))
Page.Response.OutputStream.Write(document.Contenu, 0, document.Contenu.Length)
Page.Response.End()
End Sub