Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 23
  1. #1
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut Télécharger un fichier depuis mon serveur

    Bonjour,

    Je sais que le sujet a été traité sous tous ses angles mais je n'arrive pas à trouver ce qui m’intéresse.

    Petite explication de mon application (en local):

    Environnement de développement: NetBean 6.9.1
    Serveur : glassfish 3.0.1
    Pdf : itext 5.0.6

    En cliquant sur un lien je créé un fichier pdf (il est stocké sur le serveur : D:\Program Files\glassfish-3.0.1\glassfish\domains\domain1)


    J'aimerai que juste après l'avoir créé, la fenêtre de téléchargement du navigateur me propose de le télécharger.

    Est-ce possible?

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 863
    Points : 3 492
    Points
    3 492

    Par défaut

    T'as des tonnes de tuto à ce propos sur le net, reviens vers nous avec plutôt des questions plus précises.

  3. #3
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    Bonjour, je reviens avec des questions plus précise sur le sujet:

    J'ai trouvé un code qui a l'air de faire ce que je veux sauf que je n'arrive pas a le tester, j'ai une erreur:

    Voici le script:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    InputStream is = new FileInputStream("C:/wamp/www/formations/AttestationSitiv/Attestation_ALIANE_Souhila_15-10-03.pdf");
    OutputStream os = response.getOutputStream();
    response.setHeader("Content-Disposition", "attachment;filename=Attestation_ALIANE_Souhila_15-10-03.pdf");
    int count;
    byte buf[] = new byte[4096];
    while ((count = is.read(buf)) > -1) {
       os.write(buf, 0, count);
    }
    is.close();
    os.close();
    et voici l'erreur (elle vient de la ligne 3):

    ATTENTION: StandardWrapperValve[GestionFormServlet]: PWC1406: Servlet.service() for servlet GestionFormServlet threw exception
    java.lang.IllegalStateException: PWC3990: getWriter() has already been called for this response
    at org.apache.catalina.connector.Response.getOutputStream(Response.java:676)
    at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:205)


    Je ne comprend pas pourquoi le "getWriter" est déjà utilisé, je ne l'ai pas utilisé avant.

    Merci de votre aide

  4. #4
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 052
    Points : 4 212
    Points
    4 212

    Par défaut

    Quel est le code complet de la servlet comment l'invoques-tu ? Par URL ? Un dispatch ?

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 863
    Points : 3 492
    Points
    3 492

    Par défaut

    Citation Envoyé par Spiritkill Voir le message
    Bonjour, je reviens avec des questions plus précise sur le sujet:

    J'ai trouvé un code qui a l'air de faire ce que je veux sauf que je n'arrive pas a le tester, j'ai une erreur:

    Voici le script:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    InputStream is = new FileInputStream("C:/wamp/www/formations/AttestationSitiv/Attestation_ALIANE_Souhila_15-10-03.pdf");
    OutputStream os = response.getOutputStream();
    response.setHeader("Content-Disposition", "attachment;filename=Attestation_ALIANE_Souhila_15-10-03.pdf");
    int count;
    byte buf[] = new byte[4096];
    while ((count = is.read(buf)) > -1) {
       os.write(buf, 0, count);
    }
    is.close();
    os.close();
    et voici l'erreur (elle vient de la ligne 3):

    ATTENTION: StandardWrapperValve[GestionFormServlet]: PWC1406: Servlet.service() for servlet GestionFormServlet threw exception
    java.lang.IllegalStateException: PWC3990: getWriter() has already been called for this response
    at org.apache.catalina.connector.Response.getOutputStream(Response.java:676)
    at org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:205)


    Je ne comprend pas pourquoi le "getWriter" est déjà utilisé, je ne l'ai pas utilisé avant.

    Merci de votre aide
    Ah je connais cette erreur là, il faudrait quà la fin de ton bout de code , tu fasses un truc du genre :

  6. #6
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    Merci pour vos réponses.

    DevServlet:
    la fonction "setComplete" n'existe pas pour "response".


    Nemek:
    La servlet est assez énorme donc je vais pas la mettre compète.
    Elle est appelée par "url" lors d'un clique sur un "select".
    Puis je regarde les paramètres et je redirige vers la bonne fonction privée dans la servlet.
    Voila un peu le cheminement.

  7. #7
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 052
    Points : 4 212
    Points
    4 212

    Par défaut

    Il ne te reste plus qu'à mettre un breakpoint sur la méthode getWriter.

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 863
    Points : 3 492
    Points
    3 492

    Par défaut

    Citation Envoyé par Spiritkill Voir le message
    Merci pour vos réponses.

    DevServlet:
    la fonction "setComplete" n'existe pas pour "response".


    Nemek:
    La servlet est assez énorme donc je vais pas la mettre compète.
    Elle est appelée par "url" lors d'un clique sur un "select".
    Puis je regarde les paramètres et je redirige vers la bonne fonction privée dans la servlet.
    Voila un peu le cheminement.
    Je ne me souviens plus exactement du nom, mais y'a complete quelque part parmi les méthodes de la classe dont est issue response. verifie bien

  9. #9
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    Est-ce que cela peut être à cause du "out"?

    Code :
    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
     
    public class GestionFormServlet extends HttpServlet {
     
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                  doThat(request, response);
    } finally {
                out.close();
            }
        }
     
     
    private void doThat(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    	if (request.getParameter("pdf") != null) {
    			InputStream is = new FileInputStream("C:/wamp/www/formations/AttestationSitiv/Attestation_ALIANE_Souhila_15-10-03.pdf");
    			OutputStream os = response.getOutputStream();
    			response.setHeader("Content-Disposition", "attachment;filename=Attestation_ALIANE_Souhila_15-10-03.pdf");
    			int count;
    			byte buf[] = new byte[4096];
    			while ((count = is.read(buf)) > -1) {
    				os.write(buf, 0, count);
    			}
    			is.close();
    			os.close();
    	}
    	getServletContext().getRequestDispatcher("...").forward(request, response);
        }

  10. #10
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    Bon ben c'était bien a cause du "out". je l'ai mis en commentaire pour l'instant et ça marche.

    Merci pour votre aide.

  11. #11
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    J'ai problème d'url, mais cela vient de moi:

    j'ai un fichier dans le dossier "web/pdf/attestation" de mon application. J'arrive pas a trouver l'url pour récupérer le fichier dans ce dossier.
    j'ai testé plusieurs url:

    formation/web/pdf/attestation/attestation1.pdf
    /formation/web/pdf/attestation/attestation1.pdf
    http://localhost:8080/formation/pdf/...testation1.pdf
    http://localhost:8080/formation/web/...testation1.pdf

    Merci de votre aide encore une fois.

  12. #12
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 052
    Points : 4 212
    Points
    4 212

    Par défaut

    Au niveau de la request tu peux reconstruire l'URL soumise par le client.
    Ca permet de construire une URL conforme.

    Pour la première, l'URL doit être relative à l'URL de la page qui contient le lien. Par exemple pour la page "http://localhost:8080/application/index.html" le lien est "web/pdf/attestation/attestation1.pdf"

    La deuxème devrait marcher normalement.

  13. #13
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    j'ai pratiquement essayé toutes les combinaisons possibles.

    Je vous donne mon arborescence au niveau du projet (NetBean)


    et celle des fichiers sur mon disque dur


    Merci pour votre aide

  14. #14
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 052
    Points : 4 212
    Points
    4 212

    Par défaut

    Dans ton projet il y a un dossier "web" mais la racine de ton application c'est pas le projet mais le répertoire "web"

    URL relative avec chemin relatif "pdf/attestation/attestation1.pdf"

    URL relative avec chemin absolu "/application/pdf/attestation/attestation1.pdf"

    URL absolue "http://localhost:8080/application/pdf/attestation/attestation1.pdf"

  15. #15
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    Bonjour,
    merci pour cette explication; j'ai testé les 3 mais aucunes ne fonctionnent. J'ai bien remplacé "application" par mon "context path" qui est "formation", mais je tombe toujours sur la même page:
    Error 500
    java.io.FileNotFoundException: http:\localhost:8080\formation\pdf\attestation\Attestation1.pdf (Syntaxe du nom de fichier, de répertoire ou de volume incorrecte)

    Le fichier existe bien dans le dossier donc je pense que cela reste une erreur d'url.


    Merci encore.

  16. #16
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 052
    Points : 4 212
    Points
    4 212

    Par défaut

    Euh... Qu'est-ce que tu essayes de faire au juste ?

    Car l'URL ce n'est pas un chemin disque !


    Tu veux récupérer le chemin sur le disque d'une ressource de ton application ?
    Si c'est le cas il faut utiliser ServletContext.getRealPath

  17. #17
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    Ben en fait, je voudrais qu'un client, qui utilise mon application à distance, puisse télécharger le fichier pdf via sont navigateur, mais comme je travaille en local, je stock le fichiers pdf dans un dossier de mon application pour pouvoir utiliser une url relative afin de ne pas la changer dés que je mettrais mon application sur un serveur à part.

    j'utilise ce bout de code dans ma servlet:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                    InputStream is = new FileInputStream("/formation/pdf/attestation/Attestation1.pdf");
                    OutputStream os = response.getOutputStream();
                    response.setHeader("Content-Disposition", "attachment;filename=Attestation1.pdf");
                    int count;
                    byte buf[] = new byte[4096];
                    while ((count = is.read(buf)) > -1) {
                        os.write(buf, 0, count);
                    }
                    is.close();
                    os.close();

  18. #18
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    problème résolu, c'est bien avec getServletContext().getRealPath();

    j'ai remplacé l'url actuel par:
    Code :
    1
    2
     
    getServletContext().getRealPath("pdf/attestation/Attestation1.pdf")
    et ça fonctionne merci beaucoup.

  19. #19
    Membre habitué
    Homme Profil pro Gael Moro
    Ingénieur Informatique et Réseaux
    Inscrit en
    avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Nom : Homme Gael Moro
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2011
    Messages : 197
    Points : 132
    Points
    132

    Par défaut

    Re,

    désolé j'ai juste un petit problème:

    juste avant de télécharger le pdf je le créé et le stock dans getServletContext().getRealPath("pdf/attestation")
    mais le problème c'est le path retourné est celui-ci:
    c:\dossier\dossier\FormationApp\build\web\pdf\attestation\

    il est dans le dossier "build", ce qui veux dire que le fichier est supprimé si on fait un "clean" alors que je voudrais qu'il soit conservé dans:
    c:\dossier\dossier\FormationApp\web\pdf\attestation\

    Y a t-il une solution?

  20. #20
    Modérateur
    Avatar de Nemek
    Homme Profil pro Logan
    Architecte technique
    Inscrit en
    août 2005
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Nom : Homme Logan
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : août 2005
    Messages : 2 052
    Points : 4 212
    Points
    4 212

    Par défaut

    Oui utilises un fichier de propriété dans lequel tu mets le chemin vers lequel tu veux conserver le fichier.

    La notion de "clean" est spécifique à ton environnement de développement. En déploiement ça n'existe pas.
    Pour ton application le répertoire "c:\dossier\dossier\FormationApp\web\pdf\attestation\" n'existe pas ! C'est un répertoire projet, de développement.
    Quand ton application sera installé, il n'y aura aucun répertoire de la sorte.

    Il n'est pas propre de stocker un fichier dans l'application web, car n'importe quel bédouin peut taper l'URL et aller chercher le fichier.

    Pourquoi stocker sous forme de fichier et ne pas générer le PDF en mémoire et l'envoyer ensuite ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •