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 :

Problème avec download fichier


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut Problème avec download fichier
    Bonjour à tous,
    J'essaye de mettre en place un modalpopup (Ajax) "waiting" durant les traitements un peu long de mon site.

    J'utilise donc un modalpopup avec un message et un Gif animé (avec fonction javascript pour que l'animation se fasse durant le postback ) qui s'affiche lorsque l'on clique sur un bouton (avec OnclientClick) via une fonction Javascript.

    Lorsque l'on clique sur le bouton, mon ModalPopUp s'affiche bien et la gif animée est bien animée.
    Les traitements (maj de la BDD, génération d'un PDF à partir d'un rapport CrystalReport et Download du PDF) de la procédure qui s'execute lors du clique du bouton se passe bien, sauf qu'à la fin de ma procédure, la commande qui doit permettre de cacher le modalpopup ne fait rien (pas de message d'erreur...).
    Le problème vient de ma fonction qui sert à downloader le fichier PDF sur le poste client car quand je supprime cette fonction, plus de problème.

    Ci-dessous, le code de cette fonction :
    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
        Private Function Upload(ByVal fichier As String, ByVal ext As String, ByVal repertoire As String) As Boolean
            ' On ouvre le fichier.
            Dim iStream As New System.IO.FileStream("C:\Inetpub\wwwroot\" & repertoire & fichier & "." & ext, System.IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
     
            Dim dataToRead As Long = iStream.Length
            Dim length As Integer
            'Response.ContentType = "application/octet-stream"
            Response.ContentType = "application/pdf"
            Response.AddHeader("Content-Disposition", "attachment; filename=" & fichier & "." & ext)
     
            Dim buffer(10000) As Byte
            ' on charge le fichier et on envoi par paquet de 10000.
            While dataToRead > 0
                'on vérifie si le client est toujours connecté
                If Response.IsClientConnected Then
                    length = iStream.Read(buffer, 0, 10000)
                    Response.OutputStream.Write(buffer, 0, length)
                    Response.Flush()
                    ReDim buffer(10000) ' Clear the buffer
                    dataToRead = dataToRead - length
                Else
                    'si le client n'est plus connecté
                    dataToRead = -1
                    Return False
                End If
            End While
            Response.Close()
            iStream.Close()
            Return True
        End Function
    Je ne trouve pas d'explication à mon problème et donc de solution...

    Par avance, merci.

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Ca vient surement du fait d'écrire directement dans Response

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Je pense aussi qu'il y a un problème à ce niveau là, mais je ne vois pas ou précisément et donc je ne vois pas de solution...
    Surtout que j'ai mis le modalpopwaiting.hide() juste avant cette fonction et j'ai tout de même le problème...
    Je pensais que même si ma fonction Download n'était pas trés "propre" (au niveau du "flux"), le modalpopwaiting.hide() étant situé avant, il devrait envoyé au client le "code" pour cacher le modalpopup...


    Citation Envoyé par lutecefalco Voir le message
    Ca vient surement du fait d'écrire directement dans Response

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Bonjour à tous,
    quelqu'un aurait-il une idée, car j'ai encore fait quelques essais et je ne trouve pas de solution à mon problème.

    Par avance, merci.

  5. #5
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonsoir,

    Je pensais que même si ma fonction Download n'était pas trés "propre" (au niveau du "flux"), le modalpopwaiting.hide() étant situé avant, il devrait envoyé au client le "code" pour cacher le modalpopup
    En fait la fonction modalpopwaiting.hide() quand elle est appelée n'est pas excécuter intantanément, le server écrit simplement dans la réponse HTTP la fonction javascript de fermeture , à la suite de cet appel tu modifis totalement le contenu du flux de réponse , le déclenchement de fermeture est perdu à ce moment là...

    Aprés est-ce indispensable d'avoir un popup perso lors d'un téléchargement alors que le navigateur possède son propre "popup" avec barre de progression?

    A suivre...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Citation Envoyé par mafyoso Voir le message
    Bonsoir,



    En fait la fonction modalpopwaiting.hide() quand elle est appelée n'est pas excécuter intantanément, le server écrit simplement dans la réponse HTTP la fonction javascript de fermeture , à la suite de cet appel tu modifis totalement le contenu du flux de réponse , le déclenchement de fermeture est perdu à ce moment là...

    Aprés est-ce indispensable d'avoir un popup perso lors d'un téléchargement alors que le navigateur possède son propre "popup" avec barre de progression?

    A suivre...
    Merci pour l'explication du fonctionnement du modalpopwaiting.hide, mais j'aimerais comprendre pourquoi tu écrits que "à la suite de cet appel tu modifis totalement le contenu du flux de réponse" ?
    Quand est-ce que le flux de réponse est émis "normalement" ? A la fin de ma fonction ?

    Effectivement pas besoin de popup lors du téléchargement, d'ailleurs j'ai bien mis le show/hide du modalpopup avant le téléchargement car c'est surtout les traitements précédents le téléchargement qui sont longs.

    Pour résumer, ce que vous voudrais faire :
    1 - Affichage du modalpopup
    2 - Traitements longs (maj BDD + génération PDF CrystalReport)
    3 - Cacher le modalpopup
    4 - télécharger le PDF généré

    Si je comprend bien, l'étape 3 ne s'execute pas tout de suite, et l'étape 4 "annule" l'étape 3...
    Y'a t'il une solution a ce problème ?

  7. #7
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonjour,

    Ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Response.OutputStream.Write(buffer, 0, length)
    Response.Flush()
    modifie la réponse Http standard et la tranforme en réponse binaire (ce qui déclenche le téléchargement côté navigateur client), et donc toutes les modifications que tu apportes à ta page via serveur sont perdues .

    Une solution serait de faire un Response.redirect vers une page qui déclenche le téléchargement et qui redirigerait ensuite vers une autre page, à développer

    A bientôt

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Citation Envoyé par mafyoso Voir le message
    Bonjour,

    Ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Response.OutputStream.Write(buffer, 0, length)
    Response.Flush()
    modifie la réponse Http standard et la tranforme en réponse binaire (ce qui déclenche le téléchargement côté navigateur client), et donc toutes les modifications que tu apportes à ta page via serveur sont perdues .

    Une solution serait de faire un Response.redirect vers une page qui déclenche le téléchargement et qui redirigerait ensuite vers une autre page, à développer

    A bientôt
    Je viens d'essayer ta solution :
    Dans ma page initiale j'ai rajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Dim urlRetour As String
            urlRetour = "http:" + Request.ServerVariables("SERVER_NAME").ToString + Request.ServerVariables("URL").ToString + "?" + Request.ServerVariables("QUERY_STRING").ToString
            Response.Redirect("adminaffichagepdf.aspx?param1=QV-" & TextBoxCodeAction.Text & "&param2=" & "upload\" & "&param3=" & urlRetour)
    J'ai créé la page adminaffichagepdf.aspx avec comme Page_Init :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
            ' On télécharge le fichier (chemin + nom fichier complet : passés en paramètre)
            Upload(Request.QueryString("param1"), "pdf", Request.QueryString("param2"))
            ' On retourne sur la page d'origine (nom complet avec param : passés en paramètre)
            Response.Redirect(Request.QueryString("param3"))
        End Sub
    Ca fonctionne bien jusqu'au Response.Redirect(Request.QueryString("param3")) qui me génère une erreur : "Cannot redirect after HTTP headers have been sent."...

  9. #9
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Re

    Essai de mettre dans le page_load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ' On télécharge le fichier (chemin + nom fichier complet : passés en paramètre)
            Upload(Request.QueryString("param1"), "pdf", Request.QueryString("param2"))
            ' On retourne sur la page d'origine (nom complet avec param : passés en paramètre)
            Response.Redirect(Request.QueryString("param3"))
        End Sub
    Bonne nuit

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Citation Envoyé par mafyoso Voir le message
    Re

    Essai de mettre dans le page_load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ' On télécharge le fichier (chemin + nom fichier complet : passés en paramètre)
            Upload(Request.QueryString("param1"), "pdf", Request.QueryString("param2"))
            ' On retourne sur la page d'origine (nom complet avec param : passés en paramètre)
            Response.Redirect(Request.QueryString("param3"))
        End Sub
    Bonne nuit

    Salut,
    J'ai mis dans le page_load mais j'ai la même erreur...

  11. #11
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonjour,

    Je comprend pas trop le problème , donc je te poste la page aspx que j'utilise pour tous les téléchargements clients .


    A suivre
    Fichiers attachés Fichiers attachés

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Citation Envoyé par mafyoso Voir le message
    Bonjour,

    Je comprend pas trop le problème , donc je te poste la page aspx que j'utilise pour tous les téléchargements clients .


    A suivre
    D'après ce que je comprends de ta page (et je viens de tester en adaptant ton code à mon projet) : tu ne reviens pas à la page appelante après avoir lancer le téléchargement... Alors que c'est justement mon problème...

  13. #13
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Re

    Il n'y pas de raison de revenir à la page appelante si le téléchargement se déclenche puisque la page appelante en arrière plan reste échangée lorsqu'il y a téléchargement ?

    Bref, je suis à côté de la plaque là on dirait

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Citation Envoyé par mafyoso Voir le message
    Re

    Il n'y pas de raison de revenir à la page appelante si le téléchargement se déclenche puisque la page appelante en arrière plan reste échangée lorsqu'il y a téléchargement ?

    Bref, je suis à côté de la plaque là on dirait
    Effectivement il n'y aurait pas besoin de revenir à la page appelante après le déclenchement du téléchargement, seulement dans la page appelante qui est en "arriere plan" mon modalpop est toujours affiché ... Donc on revient à mon problème initial : comment faire disparaitre ce modalpopup ?

    C'est pour cela que je pensais qu'un retour "forcé" à la page appelante après téléchargement devait se faire, ceci pour faire disparaitre le modalpopup...
    Mais visiblement, le response.write("pageappelante") ne marche pas car il y a eut un téléchargement juste avant... Le problème a juste été déplacé de me page appelante vers la nouvelle page d'affichage du pdf...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Par défaut
    Bonjour à tous,
    J'ai encore fait quelques essais et je ne trouve pas de solution
    Personne n'aurait une idée ?

    Par avance, merci.

Discussions similaires

  1. Problème avec les fichiers en C++
    Par snatch321 dans le forum C++
    Réponses: 7
    Dernier message: 09/05/2006, 19h07
  2. Problème avec un fichier .BAT
    Par jbidou88 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 01/05/2006, 13h03
  3. Problème avec un fichier .BAT
    Par jbidou88 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/04/2006, 14h55
  4. Problème avec des fichiers
    Par Stany dans le forum C++
    Réponses: 7
    Dernier message: 17/10/2005, 16h53
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

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