IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Download de fichier (WebClient.DownloadFile)


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2004
    Messages : 156
    Points : 90
    Points
    90
    Par défaut Download de fichier (WebClient.DownloadFile)
    Bonjour comme le tire l'indique je souhaité effectué un download de fichier qui se produira automatiquement lorsqu'on accèdera à une page.
    Pour cela j'ai déjà eu quelques pistes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim client As New System.Net.WebClient          
    client.DownloadFile(rep & fichier, fichier)
    Mais comme vous en doutez cela n'a pas fonctionné, je suis donc allez plus loin et j'ai trouvé qu'il fallait que je rajoute des propriétés particulières

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim client As New System.Net.WebClient
    Response.Clear()
    System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + "facture_emise.txt")
    Response.ContentType = "application/octet-stream"
    Dim rep As String = "http://" & Request.Url.Host & ":" & Request.Url.Port & Request.ApplicationPath & "/temp/"
    Dim fichier As String = "fichier.txt"
    client.DownloadFile(rep & fichier, fichier)
    Donc la le dowload fonctionne sauf qu'au lieu de me proposer le fichier il me propose la page sur lequel j'étais avec son contenu (c'est à dire <html>...</html>)

    Voila alors si quelqu'un a une solution pour moi, je suis prenneur

  2. #2
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2004
    Messages : 156
    Points : 90
    Points
    90
    Par défaut
    Après de tumultes recherches, j'ai trouvé une solution et comme d'habitude il fallait partir sur une autre idée. D'ailleur c'est un bon conseil quand vous ne trouvez pas de solution essayez de partir sur un autre principe, c'est souvent très efficace

    Bon voila la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim fichier As String = <votre fichier texte>
    Dim repertoire As String = <repertoire serveur où est stocké le fichier>
    Dim fichier_info As New System.IO.FileInfo(repertoire & fichier)
    Response.Clear() ' efface les flux du tampon
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fichier_info.Name)
    Response.AppendHeader("Content-Length", fichier_info.Length.ToString()) ' Evite de rajouter des infos indésirables
    Response.ContentType = "application/octet-stream"
    Response.Flush()
    Response.WriteFile(fichier_info.FullName)
    Response.End()
    Cette exemple fonctionne pour les fichiers texte, pour les autres types de fichier, il faut modifier le header

    exemple avec word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.ContentType = "application/msword"
    exemple avec Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.ContentType = "application/vnd.ms-excel"
    Et enfin le meilleur pour la fin, zipper un fichier et le proposer au download
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Shell("""" & ConfigurationSettings.AppSettings("Chemin7zEXE") & """ a -tzip """ & cl_session.RepTempEncours & "\fiches.zip" & """ """ & cl_session.RepTempEncours & "\*""", AppWinStyle.Hide, True)
    'Shell("""" & ConfigurationSettings.AppSettings("Chemin7zEXE") & """ a -tzip ""c:\temp\fiches.zip" & """ """ & "c:\temp" & "\*""", AppWinStyle.Hide, True)
    Response.ContentType = "application/octet-stream"
    Response.AddHeader("Content-Disposition", "attachment; filename=images.rar")
    Response.Flush()
    Response.WriteFile(cl_session.RepTempEncours & "\fiches.zip")

  3. #3
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2004
    Messages : 156
    Points : 90
    Points
    90
    Par défaut
    Un petit surplus pour rendre le code plus facilement utilisable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
            Public Enum eNature As Short
                Text
                Word
                Excel
                Zipper
            End Enum
     
            Public Shared Function Download(ByVal repertoire As String, ByVal fichier As String, ByVal type As eNature) As Boolean
                Dim downloader As Boolean = False
                Try
                    If type = eNature.Text Then
                        ' Récupération des informations du fichier
                        Dim fichier_info As New System.IO.FileInfo(repertoire & fichier)
                        ' efface les flux du tampon
                        HttpContext.Current.Response.Clear()
                        ' Ajoute les en-tête de fichier (formalisation des fichiers et on empêche que des informations
                        ' indésirables se rajoute après la fin du fichier (problèle d'envoie de flux)
                        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + fichier_info.Name)
                        HttpContext.Current.Response.AppendHeader("Content-Length", fichier_info.Length.ToString())
                        ' On dit qu'on envoie un flux de type texte
                        HttpContext.Current.Response.ContentType = "application/octet-stream"
                        HttpContext.Current.Response.Flush() 'prépare l'envoi 
                        ' On écrit le fichier c'est à dire qu'on propose à l'utilisateur d'enregistrer le fichier
                        HttpContext.Current.Response.WriteFile(fichier_info.FullName)
                        HttpContext.Current.Response.End()
                    ElseIf type = eNature.Excel Then
                        ' Récupération des informations du fichier
                        Dim fichier_info As New System.IO.FileInfo(repertoire & fichier)
                        ' efface les flux du tampon
                        HttpContext.Current.Response.Clear()
                        ' Ajoute les en-tête de fichier (formalisation des fichiers et on empêche que des informations
                        ' indésirables se rajoute après la fin du fichier (problèle d'envoie de flux)
                        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + fichier_info.Name)
                        HttpContext.Current.Response.AppendHeader("Content-Length", fichier_info.Length.ToString())
                        ' On dit qu'on envoie un flux de type excel
                        HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"
                        HttpContext.Current.Response.Flush() 'prépare l'envoi 
                        ' On écrit le fichier c'est à dire qu'on propose à l'utilisateur d'enregistrer le fichier
                        HttpContext.Current.Response.WriteFile(fichier_info.FullName)
                        HttpContext.Current.Response.End()
                    ElseIf type = eNature.Word Then
                        ' Récupération des informations du fichier
                        Dim fichier_info As New System.IO.FileInfo(repertoire & fichier)
                        ' efface les flux du tampon
                        HttpContext.Current.Response.Clear()
                        ' Ajoute les en-tête de fichier (formalisation des fichiers et on empêche que des informations
                        ' indésirables se rajoute après la fin du fichier (problèle d'envoie de flux)
                        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + fichier_info.Name)
                        HttpContext.Current.Response.AppendHeader("Content-Length", fichier_info.Length.ToString())
                        ' On dit qu'on envoie un flux de type word
                        HttpContext.Current.Response.ContentType = "application/msword"
                        HttpContext.Current.Response.Flush() 'prépare l'envoi 
                        ' On écrit le fichier c'est à dire qu'on propose à l'utilisateur d'enregistrer le fichier
                        HttpContext.Current.Response.WriteFile(fichier_info.FullName)
                        HttpContext.Current.Response.End()
                    ElseIf type = eNature.Zipper Then
                        ' On lance l'application qui va permettre de zipper le fichier grâce aux éléments inscrit dans le web.config
                        Shell("""" & ConfigurationSettings.AppSettings("chemin_zipper") & """" & ConfigurationSettings.AppSettings("parametres_zipper") & """" & repertoire & fichier & """ """ & repertoire & "\*""", AppWinStyle.Hide, True)
                        ' On dit qu'on envoie un fichier de type texte
                        HttpContext.Current.Response.ContentType = "application/octet-stream"
                        ' Ajoute les en-tête de fichier (formalisation des fichiers)
                        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fichier)
                        HttpContext.Current.Response.Flush() 'prépare l'envoi 
                        ' On écrit le fichier c'est à dire qu'on propose à l'utilisateur d'enregistrer le fichier
                        HttpContext.Current.Response.WriteFile(fichier)
                    End If
                    downloader = True
                Catch ex As Exception
                    ' Gestion des erreurs
                    HttpContext.Current.Response.Write("Erreur dans le processus de download !")
                End Try
                ' Retourne un booléen si le téléchargement est OK ou non
                Return downloader
            End Function
    Vous devez également renseigné 2 paramètres dans le fichier web.config (ici mon exemple est avec 7zip)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <!-- REPERTOIRE DU PROGRAMME QUI ZIP LES FICHIERS -->
    <add key="chemin_zipper" value="C:\Program Files\Z-Zip\7z.exe" />
    <add key="parametres_zipper" value="a -tzip" />

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Points : 53
    Points
    53
    Par défaut

    Bonjour,

    je suis entrain de dévleopper un extranet. les clients de la société peuvent utiliser cet extranet pour télécharger des documents mis à leur disposition.

    j'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim fichier As String = <votre fichier texte>
    Dim repertoire As String = <repertoire serveur où est stocké le fichier>
    Dim fichier_info As New System.IO.FileInfo(repertoire & fichier)
    Response.Clear() ' efface les flux du tampon
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fichier_info.Name)
    Response.AppendHeader("Content-Length", fichier_info.Length.ToString()) ' Evite de rajouter des infos indésirables
    Response.ContentType = "application/octet-stream"
    Response.Flush()
    Response.WriteFile(fichier_info.FullName)
    Response.End()
    je travaille en local et ça marche quand je donne le chemin complet du répertoire
    "c:\InetPub\wwwroot\Intra-rh\docs\"

    si je mets que le nom du répertoire, celà ne marche pas (logique)

    ma question : est comment mettre le bon chemin en sachant que le jour de déploiement, l'extranet dera être sur le serveur iis de la société : nom du serveur : serveuriis-sql
    chemin : Inetpub\wwwroot\EXTRANET_CLIENT\docs\

    Merci
    le moyen le plus simple de découvrir avant de demander est de chercher et expérimenter, c'est la devise du bosseur.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2005
    Messages : 391
    Points : 301
    Points
    301
    Par défaut
    on peut egalement faire
    byte[] buffer = donnee de mon fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    MemoryStream ms = new MemoryStream(buffer );
     
                    //on determine le nom de fichier
                    Response.OutputStream.Write(buffer , 0, buffer .Length);
     
                    Response.Clear();
                    Response.AddHeader("content-disposition", "attachment;filename=" + doc.FileName);
                    //on determine le type de fichier que l on envoi
                    Response.ContentType = "application/ms-word";
                    //on ecrit le fichier dans le flux
                    ms.WriteTo(Response.OutputStream);
                    //on vide le flux
                    Response.Flush();
                    Response.End();

  6. #6
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut
    Bonjour, je suis en train de créer une application qui genere un fichier html à partir de ma base de données. Une fois le fichier créé, il est nommé "MonFichier.doc" et proposé en téléchargement pour les utilisateurs.
    Je l'ai nommé .doc pour qu'ils puissent l'ouvrir directement en Word.

    Actuellement d'ai 2 soucis :
    -----------------------------------------------------
    1) problème d'encodage. Tous les caracteres speciaux je suis obligé les d'ecrire de cette maniere (Ex. : é --> &eacute; )
    Ceci ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.AddHeader("Charset", "iso-8859-1");
    -----------------------------------------------------
    2) Deuxieme problème : MonFichier.doc est in fichier html à la base. Je l'ai crée avec des balises html et nommé .doc.
    Quand l'utilisateur l'ouvre, il est normal que le Word l'ouvre en affichage html. Donc, pour affichage correct il faut aller dans "Affichage-->Affichage documents--> Page"
    Y a t'il un moyen de forcer affichage en mode Page au debut?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Buffer = false;
            Response.BufferOutput = false;
            Response.AddHeader("Content-Type", "application/ms-word");
            Response.AddHeader("Content-Disposition", "inline; filename=AAA.doc");
            Response.ContentType = "application/ms-word";
            Response.WriteFile(Server.MapPath("MonFichier.doc"));
            Response.Flush();
            Response.End();
    Merci

  7. #7
    Membre régulier Avatar de Pingva
    Profil pro
    Inscrit en
    Août 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 190
    Points : 78
    Points
    78
    Par défaut
    Voilà je suis de nouveau là avec une nouvelle question.

    Je crée par le code mon document html (avec les données issues de la base de données)
    Ensuite je l'envoie à l'utilisateur qui l'ouver avec Word.
    Tout va bien, sauf que j'aimerai que l'utilisateur ouvre mon document en mode paysage.
    Est ce qui'il exite un equivalent dans HTML, comme j'ai pu utiliser pour in saut de page ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "<br clear=all style='mso-special-character:line-break;page-break-before:always'>"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/06/2015, 09h04
  2. WebClient.DownloadFile() Incapable d'accéder au fichier téléchargé
    Par joce21 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 26/06/2012, 00h02
  3. [Javabean/sun.net.ftp] Downloader un fichier txt
    Par benben13 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 13/09/2005, 16h43
  4. [C#] Download de fichier
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/06/2005, 10h09
  5. [VB.NET] Download de fichiers sur un serveur...
    Par Webman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 19/05/2004, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo