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 :

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;
	}
Mon problème :

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