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

Struts 1 Java Discussion :

downloader un fichier stocké sur le serveur


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 68
    Par défaut downloader un fichier stocké sur le serveur
    Bonjour à tous,

    je fais appel à vos lumières car après une journée de boulot j'ai pété les plombs devant mon problème :-) Mon serveur stocke des fichiers (rar, xls, ...).
    Dans une JSP, l'utilisateur clique sur un lien qui appelle la servlet dont le code est ci-dessous. Le but est de télécharger le fichier sélectionné par l'utilisateur.

    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
     
    public class DownloadServlet extends HttpServlet {
     
        private static final long serialVersionUID = 1L;
     
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
     
            String filename = "blabla.rar";                
                    FileInputStream in = new filename 
                    response.setContentType(attachment.getMimeType());
                    ServletOutputStream out = response.getOutputStream();
     
                    byte[] buffer = new byte[4 * 1024];
                    int bytesRead;
                    while ((bytesRead = in.read(buffer)) != -1) {
                        out.write(buffer, 0, bytesRead);
                    }
     
                    response.setStatus(HttpServletResponse.SC_OK);
     
                    response.setHeader("Content-Disposition", "attachment; filename=" + filename);
                }
            }
            catch (IOException e) {
     
                throw e;
            }
            finally {
                   ServletOutputStream out = response.getOutputStream();
                try{out.flush();}catch (Exception ignored) {}
                try{out.close();}catch (Exception ignored) {}
            }        
        }
    }
    Une boîte de dialogue apparaît en demandant si je souhaite sauver le fichier. Pas de problème cela fonctionne SAUF que le fichier porte le nom de ma servlet et que l'OS ne reconnaît pas le fichier downloadé. Bref si ma servlet s'appelle "downloadFile" et que mon fichier se nomme "monBeauZip.rar", l'utlilisateur downloadera effectivement un fichier ".rar" portant le nom "downloadFile". Si j'utilise Struts, il portera le nom suivant : actionName.do (nom de l'action suivi de .do). Attention : pas de struts 1.2.6 mais 1.2.4.

    Comment résoudre mon problème ? L'utilisateur est pour l'instant obligé de renommer son fichier pour pouvoir l'employer

    Merci d'avance pour l'aide apportée (que vous trouviez une solution ou non)

    Coyote

  2. #2
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 317
    Par défaut
    Essaies en mettent les response.setStatus() et response.setHeader() en tout premier (avant d'écrire la réponse)
    ....
    try {
    response.setStatus(HttpServletResponse.SC_OK);
    response.setHeader("Content-Disposition", "attachment; filename=" + filename);

    String filename = "blabla.rar";
    ...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 68
    Par défaut Solutions download
    Un grand merci pour ta rapidité et surtout pour ta solution qui fonctionne parfaitement. Tu as entièrement raison, il fallait d'abord paramétrer la response en settant les attributs relatifs au fichier que l'on souhaite downloader.

    De plus, dans le cas d'un download via une servlet, on va écrire le contenu du fichier dans l'outputstream de la servlet. Il ne faut surtout pas fermer le flux, ni en faire un flush sinon le download ne se fera pas.

    Voici le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
            response.setStatus(HttpServletResponse.SC_OK);            
            response.setHeader("Content-Disposition", "attachment; filename=" + filename);
            response.setContentType(" "); // set the correct mime type
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
            ServletOutputStream out = response.getOutputStream();
     
            byte[] buffer = new byte[4 * 1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                  out.write(buffer, 0, bytesRead);
            }
            in.close();
    Coyote

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

Discussions similaires

  1. uploader /downloader un fichier pdf sur un serveur
    Par xaupaix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/04/2010, 16h12
  2. Telecharger fichier stocké sur le serveur
    Par swinia dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 08/05/2009, 13h00
  3. Télécharger un fichier stocké sur le serveur
    Par j2eejsp dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2008, 20h41
  4. [HTML] Utilisation d'une image stockée sur un serveur dans un fichier HTML
    Par Rosa2008 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/07/2008, 08h01
  5. afficher les fichiers stockés sur serveur ftp
    Par stagolee dans le forum Hébergement
    Réponses: 2
    Dernier message: 27/11/2007, 18h41

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