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 :

Téléchargement d'un fichier texte


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut Téléchargement d'un fichier texte
    Bonjour tout le monde .

    Voilà, ma question porte sur quelque chose d'assez courant, le téléchargement d'un fichier texte.

    Pour information, je récupère un MemoryStream et balance le tout dans un fichier txt.

    Cela marche très bien lorsque je le fais sur la page en cours, sur clic d'un bouton, dans l'event Click de ce même bouton, je lance le code suivant:
    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
     
    //Obtenir le stream (type de fichier particulier dont je récupère le MemoryStream)
                MemoryStream stream = myFile.GetStream();
     
                if (stream.Length > 0)
                {
                    try
                    {
                        //On récupère le tableau de bytes
                        byte[] arrayByte = stream.ToArray();
     
                        this.Response.Clear();
                        this.Response.ContentType = "application/vnd.text";
                        this.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
                        stream.WriteTo(page.Response.OutputStream);
                        stream.Close();
                        //page.Response.End();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        this.Response.End();  
                    }                
     
                }
                else
                {
                    throw new Exception("Le fichier est vide !");
                }
    Et donc le fichier est proposé au téléchargement.

    Seulement, il a fallu, pour des besoins particuliers, que j'agisse différemment.

    En effet, je dois ouvrir une page à part qui va lancer le téléchargement.

    Donc, sur clic de mon bouton, je lance l'ouverture d'une page via un window.open() généré dans un ScriptManager (j'ai un updatepanel sur ma page, mais même sans, c'est le même topo...), et je lance la méthode précisée plus haut.

    Le problème est que, lors de l'affichage de la fenêtre de téléchargement, il me propose, non pas le fichier texte en tant que tel, mais la page aspx précédemment ouverte. Si je fais ouvrir, j'ai le texte du memorystream directement affiché dans la page, si je fais enregistrer, j'ai le message d'erreur suivant:
    Internet Explorer ne peut pas télécharger Popup.aspx.
    J'ai bien essayé de changer mon code:
    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
     
    //Obtenir le stream
                MemoryStream stream = myFile.GetStream();
     
                if (stream.Length > 0)
                {
                    try
                    {
                        //On récupère le tableau de bytes
                        byte[] arrayByte = stream.ToArray();
                        stream.Close();
                        stream.Flush();
     
                        this.Response.Clear();
                        //this.Response.ContentType = "application/vnd.text";
                        this.Response.AddHeader("Content-Length", arrayByte.Length.ToString());
                        this.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileName));
                        //stream.WriteTo(this.Response.OutputStream);
                        this.Response.ContentType = "application/octet-stream";
                        this.Response.BinaryWrite(arrayByte);
                        //this.Response.End();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        HttpContext.Current.Response.End();
                    }
                }
                else
                {
                    throw new Exception("Le fichier est vide !");
                }
    Si vous avez des pistes, merci

  2. #2
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    En fait, ce qui m'importe vraiment ici, ce n'est pas spécialement d'ouvrir une nouvelle page pour y télécharger le fichier, mais d'afficher un alert() javascript avant de lancer le téléchargement.

    Le fait est qu'avant je me contentais de lancer le téléchargement sur la page en cours, sans me soucier d'une possibilité de lancer un code javascript. Maintenant, le problème est que je veux lancer un alert(); via javascript mais je change le Response de la page. C'est pour cela que je me suis orienté vers l'affichage d'une nouvelle page dédiée au téléchargement.

    Du coup, mon alert(); s'affiche sur la page en cours et le téléchargement se lance sur la page ouverte mais, comme précisé, en me balançant le téléchargement de la page aspx elle-même...

  3. #3
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Et pourquoi tu ne mettrais pas une alerte "confirm" sur le bouton?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Parceque ce n'est pas une simple fenêtre de confirmation qu'il me faut, c'est un alert() dont le texte est construit à la volée sur la sélection que je fais à l'écran.

  5. #5
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Bon j'ai trouvé la solution, que j'aurais voulu éviter, mais ça fonctionne.

    Je sépare mon processus en 3 étapes.

    1) Je lance le processus d'écriture de mon alert et je le lance suite au clic sur le bouton.

    2) Je lance, aussi via un ScriptManager, un __doPostBack avec un EventTarget à "MustDownload" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    //Génération d'un PostBack avec indication de téléchargement
            ScriptManager.RegisterStartupScript(this, typeof(Page), "MustDownload", "__doPostBack('MustDownload','');", true);
    3) Au PostBack, je détecte que c'est bien le bon EventTarget et je lance finalement le téléchargement.

    Et ça fonctionne .

    Voilà, merci Immobilis de ta participation.

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

Discussions similaires

  1. Téléchargement fichier texte
    Par vedder dans le forum Général Java
    Réponses: 6
    Dernier message: 20/05/2013, 16h39
  2. Réponses: 2
    Dernier message: 09/05/2011, 20h17
  3. [PHP 5.0] Générer fichier texte pour téléchargement en local
    Par calitom dans le forum Langage
    Réponses: 3
    Dernier message: 22/07/2009, 13h01
  4. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 14h56
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 12h17

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