From e97089a81094c34f8350a67b0703fed7d140b1cf Mon Sep 17 00:00:00 2001 From: Vandewaeter Fabio <fabio.vandewaeter.etu@univ-lille.fr> Date: Tue, 11 Mar 2025 08:53:49 +0100 Subject: [PATCH] save --- .../java/fil/sr2/flopbox/FTPResource.java | 99 ++++++++++--------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/src/main/java/fil/sr2/flopbox/FTPResource.java b/src/main/java/fil/sr2/flopbox/FTPResource.java index a8a2f26..c922054 100644 --- a/src/main/java/fil/sr2/flopbox/FTPResource.java +++ b/src/main/java/fil/sr2/flopbox/FTPResource.java @@ -28,60 +28,62 @@ public class FTPResource { } @GET -@Path("/{alias}/{path: .+}") -public Response getFTPResource( - @PathParam("alias") String alias, - @PathParam("path") String path, - @HeaderParam("X-FTP-User") String user, - @HeaderParam("X-FTP-Pass") String pass) { - - FTPServerConfig config = FTPServerRepository.getInstance().getServer(alias); - if (config == null) { - return Response.status(Response.Status.NOT_FOUND) - .entity("Serveur FTP non trouvé").build(); - } - - FTPClient ftpClient = new FTPClient(); - try { - // Connexion et authentification FTP - ftpClient.connect(config.getHost(), config.getPort()); - if (!ftpClient.login(user, pass)) { - return Response.status(Response.Status.UNAUTHORIZED) - .entity("Authentification FTP échouée").build(); - } - ftpClient.enterLocalPassiveMode(); - ftpClient.setFileType(FTP.BINARY_FILE_TYPE); + @Path("/{alias}/{path: .+}") + public Response getFTPResource( + @PathParam("alias") String alias, + @PathParam("path") String path, + @HeaderParam("X-FTP-User") String user, + @HeaderParam("X-FTP-Pass") String pass) { - // Vérifier l'existence et le type de la ressource - FTPFile[] files = ftpClient.listFiles(path); - if (files == null || files.length == 0) { + System.out.println("GetFTPResource()"); + FTPServerConfig config = FTPServerRepository.getInstance().getServer(alias); + if (config == null) { return Response.status(Response.Status.NOT_FOUND) - .entity("Ressource non trouvée : " + path).build(); + .entity("Serveur FTP non trouvé").build(); } - FTPFile file = files[0]; - if (file.isDirectory()) { - // Si c'est un répertoire, renvoyer la liste des noms de fichiers/répertoires - String[] names = ftpClient.listNames(path); - ftpClient.logout(); - ftpClient.disconnect(); - return Response.ok(names).build(); - } else { - // Si c'est un fichier, renvoyer un flux binaire pour le téléchargement - InputStream is = ftpClient.retrieveFileStream(path); - if (is == null) { - return Response.status(Response.Status.INTERNAL_SERVER_ERROR) - .entity("Échec de la récupération du fichier").build(); + + FTPClient ftpClient = new FTPClient(); + try { + // Connexion et authentification FTP + ftpClient.connect(config.getHost(), config.getPort()); + if (!ftpClient.login(user, pass)) { + return Response.status(Response.Status.UNAUTHORIZED) + .entity("Authentification FTP échouée").build(); + } + ftpClient.enterLocalPassiveMode(); + ftpClient.setFileType(FTP.BINARY_FILE_TYPE); + + // Vérifier l'existence et le type de la ressource + FTPFile[] files = ftpClient.listFiles(path); + if (files == null || files.length == 0) { + return Response.status(Response.Status.NOT_FOUND) + .entity("Ressource non trouvée : " + path).build(); + } + FTPFile file = files[0]; + if (file.isDirectory()) { + // Si c'est un répertoire, renvoyer la liste des noms de fichiers/répertoires + String[] names = ftpClient.listNames(path); + ftpClient.logout(); + ftpClient.disconnect(); + return Response.ok(names).build(); + } else { + // Si c'est un fichier, renvoyer un flux binaire pour le téléchargement + InputStream is = ftpClient.retrieveFileStream(path); + if (is == null) { + return Response.status(Response.Status.INTERNAL_SERVER_ERROR) + .entity("Échec de la récupération du fichier").build(); + } + // On utilise ici une classe utilitaire pour fermer proprement le flux et la + // connexion FTP + return Response.ok(new InputStreamResource(is, ftpClient)) + .header("Content-Disposition", "attachment; filename=\"" + getFileName(path) + "\"") + .build(); } - // On utilise ici une classe utilitaire pour fermer proprement le flux et la connexion FTP - return Response.ok(new InputStreamResource(is, ftpClient)) - .header("Content-Disposition", "attachment; filename=\"" + getFileName(path) + "\"") - .build(); + } catch (IOException e) { + return Response.status(Response.Status.INTERNAL_SERVER_ERROR) + .entity("Erreur FTP : " + e.getMessage()).build(); } - } catch (IOException e) { - return Response.status(Response.Status.INTERNAL_SERVER_ERROR) - .entity("Erreur FTP : " + e.getMessage()).build(); } -} // POST /ftps - enregistre un nouveau serveur FTP @POST @@ -99,7 +101,6 @@ public Response getFTPResource( return Response.created(builder.build()).entity(config).build(); } - @DELETE @Path("/{alias}") public Response removeFTPServer(@PathParam("alias") String alias) { -- GitLab