Bonjour,
J'ai un petit problème avec un download de fichier réalisé dans une action Struts.
Contexte :
Je souhaite mettre à disposition des utilisateurs de l'application certains fichiers se trouvant sur un FTP via mon application web. La finalité étant de ne pas leur fournir le mot de passe et de passer par le port 80.
Ma solution technique :
Afin de réaliser ça, j'ai affiché des liens sur une jsp affichant les différents fichier. Chacun des liens pointe vers l'action dont le code est ci-dessous :
Mon problème :
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
36
37 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //on récupère les paramètres String host = (String) request.getSession().getServletContext().getAttribute("ftp_host"); String port = (String) request.getSession().getServletContext().getAttribute("ftp_port"); String login = (String) request.getSession().getServletContext().getAttribute("ftp_login"); String password = (String) request.getSession().getServletContext().getAttribute("ftp_password"); String path = (String) request.getSession().getServletContext().getAttribute("ftp_path"); //on récupère le nom du fic à download String filename = (String) request.getParameter("filename"); //Connexion au serveur FTPClient ftp = new FTPClient(); ftp.connect(host, new Integer(port).intValue()); ftp.login(login, password); //On se positionne sur le bon répertoire ftp.changeWorkingDirectory(path); //on définit le header response.setContentType("application/download"); response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); //on gère le download du fichier ServletOutputStream out = response.getOutputStream(); ftp.enterLocalPassiveMode(); ftp.retrieveFile(filename, out); out.flush(); out.close(); ftp.disconnect(); return null; }
La redirection sur le stream fonctionne bien mais le fichier que je récupère est corrompu (j'ai des octects en plus).
De quoi celà peut-il provenir ?
Comment puis-je corriger le problème ?
Merci d'avance
Partager