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 :

Deuxième téléchargement impossible


Sujet :

ASP.NET

  1. #1
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut Deuxième téléchargement impossible
    Bonjour ,

    Je suis sur un projet ASP.Net . J'ai besoin de lancer un téléchargement d'un fichier word (.docx) . Tout fonctionne correctement au premier téléchargement , mais impossible d'en effectuer des supplémentaire sans rafraichir la page.
    Cela me renvoie une exception de type 'System.NullReferenceException' , classique .

    Voici mon ActionResult en question :

    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
    public ActionResult Download()
            {
                ReportByClientViewModel data = (ReportByClientViewModel)TempData["ReportByClient"];
                string filename = "export.docx";
     
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename);
     
                    MemoryStream s = new MemoryStream();
                    ExportReport.ExportToWord(s, data.Report); //Bug at the second download
                    s.Position = 0;
                    s.CopyTo(Response.OutputStream);
     
     
     
                return File(s, "application/x-doc", filename);
            }
    Je me doute que le problème vient du MemoryStream , mais si quelqu'un peut m'expliquer c'est pas de refus.

    Merci
    throw new NoSignatureException();

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Probablement la clôture de ton stream qui n'est pas faite. en tout cas dans le code fournis. Utilise un using avec ton stream pour être certain que la resource est bien relachée. (dispose)

  3. #3
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Merci , j'ai essayer avec le using mais téléchargement devient impossible puisque il est "Impossible d'accéder à un Stream fermé" ( c'est le message d'erreur) . En effet que lors de l'utilisation d'un MemoryStream le using est inutile.
    J'ai plus l'impression que le problème vient d'une des variables de ma méthode ExportToWord ... je pense ....

    En tous cas je te remercie.
    throw new NoSignatureException();

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par WaterTwelve21 Voir le message
    Merci , j'ai essayer avec le using mais téléchargement devient impossible puisque il est "Impossible d'accéder à un Stream fermé" ( c'est le message d'erreur).
    C'est probablement parce que tu as fermé le using trop tôt, avant le return.

    Citation Envoyé par WaterTwelve21 Voir le message
    En effet que lors de l'utilisation d'un MemoryStream le using est inutile.
    Il faut utiliser using partout où c'est possible, cela fait partie des bonnes pratiques en C#. Un using n'est inutile que dans le cas où tu souhaites explicitement disposer ton objet par toi-même, ou bien sûr si l'objet n'implémente pas IDisposable.

    Ton code devrait ressembler à ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    using (var s = new MemoryStream())
    {
    	ExportReport.ExportToWord(s, data.Report); //Bug at the second download
    	s.Position = 0;
    	s.CopyTo(Response.OutputStream);
     
    	return File(s, "application/x-doc", filename);
    }

    Si avec le code ci-dessus ca ne marche pas, alors le problème peut venir de ta méthode ExportToWord, auquel cas il faudra que tu postes son contenu.

    Autre remarque, le type MIME pour un fichier DOCX c'est "application/vnd.openxmlformats-officedocument.wordprocessingml.document" et non "application/x-doc". Cela n'a rien à voir avec le problème que tu rencontres, mais autant en profiter pour le préciser.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Merci pour ton aide .

    Si j'utilise le using de cette manière le stream est considéré comme fermé , c'est parce que ce stream est dans un using dans ma méthode ExportToWord, il est libéré a cet endroit .

    Merci pour type MIME , les deux fonctionnent.
    throw new NoSignatureException();

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Citation Envoyé par WaterTwelve21 Voir le message
    Merci pour ton aide . Si j'utilise le using de cette manière le stream est considéré comme fermé , c'est parce que ce stream est dans un using dans ma méthode ExportToWord, il est libéré a cet endroit . Merci pour type MIME , les deux fonctionnent.
    La responsabilité de ta méthode n'est pas de clôturer ton stream. laisse le ouvert ça te permettra lors de futur utilisation de pouvoir faire plusieurs fois un export sans devoir ouvrir et fermer un flux. Retire donc le using dans méthode et met la à l'extérieur comme discuté précédement. Tu ne devrais plus avoir l'erreur que le flux est déjà clôturé. A+

  7. #7
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Rebonjour , j'ai viré le using dans ma méthode aucune amélioration , stream fermé dès le premier téléchargement . Le using de ma méthode s'occupe d'un WordprocessingDocument ( sdk OpenXML 2.5 ) pardon de m'être trompé .
    J'ai trouvé mon erreur , il s'agit du deuxième paramètre de ma méthode qui est a null au second passage .

    En tous cas merci , cela m'apprendra à ne pas suffisamment utiliser le débogueur
    throw new NoSignatureException();

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

Discussions similaires

  1. Téléchargement impossible avec tous les navigateurs
    Par tissard dans le forum Windows XP
    Réponses: 11
    Dernier message: 25/03/2010, 15h19
  2. [QWebView] Téléchargement impossible
    Par astrofan dans le forum Qt
    Réponses: 2
    Dernier message: 11/04/2009, 01h48
  3. [MySQL] Téléchargement impossible serveur Free.fr vers client
    Par Antherak dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 22/03/2009, 22h34
  4. Téléchargement impossible PJ sous Navigateur.
    Par botakelymg dans le forum Internet
    Réponses: 2
    Dernier message: 13/11/2008, 11h23
  5. téléchargement impossible de fichiers
    Par wyttuanns dans le forum Débuter
    Réponses: 1
    Dernier message: 30/12/2007, 16h21

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