Skip to content
Snippets Groups Projects
Commit e97089a8 authored by Fabio Vandewaeter's avatar Fabio Vandewaeter
Browse files

save

parent d94d1ff6
No related branches found
No related tags found
No related merge requests found
...@@ -28,60 +28,62 @@ public class FTPResource { ...@@ -28,60 +28,62 @@ public class FTPResource {
} }
@GET @GET
@Path("/{alias}/{path: .+}") @Path("/{alias}/{path: .+}")
public Response getFTPResource( public Response getFTPResource(
@PathParam("alias") String alias, @PathParam("alias") String alias,
@PathParam("path") String path, @PathParam("path") String path,
@HeaderParam("X-FTP-User") String user, @HeaderParam("X-FTP-User") String user,
@HeaderParam("X-FTP-Pass") String pass) { @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);
// Vérifier l'existence et le type de la ressource System.out.println("GetFTPResource()");
FTPFile[] files = ftpClient.listFiles(path); FTPServerConfig config = FTPServerRepository.getInstance().getServer(alias);
if (files == null || files.length == 0) { if (config == null) {
return Response.status(Response.Status.NOT_FOUND) 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()) { FTPClient ftpClient = new FTPClient();
// Si c'est un répertoire, renvoyer la liste des noms de fichiers/répertoires try {
String[] names = ftpClient.listNames(path); // Connexion et authentification FTP
ftpClient.logout(); ftpClient.connect(config.getHost(), config.getPort());
ftpClient.disconnect(); if (!ftpClient.login(user, pass)) {
return Response.ok(names).build(); return Response.status(Response.Status.UNAUTHORIZED)
} else { .entity("Authentification FTP échouée").build();
// Si c'est un fichier, renvoyer un flux binaire pour le téléchargement }
InputStream is = ftpClient.retrieveFileStream(path); ftpClient.enterLocalPassiveMode();
if (is == null) { ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity("Échec de la récupération du fichier").build(); // 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 } catch (IOException e) {
return Response.ok(new InputStreamResource(is, ftpClient)) return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.header("Content-Disposition", "attachment; filename=\"" + getFileName(path) + "\"") .entity("Erreur FTP : " + e.getMessage()).build();
.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 /ftps - enregistre un nouveau serveur FTP
@POST @POST
...@@ -99,7 +101,6 @@ public Response getFTPResource( ...@@ -99,7 +101,6 @@ public Response getFTPResource(
return Response.created(builder.build()).entity(config).build(); return Response.created(builder.build()).entity(config).build();
} }
@DELETE @DELETE
@Path("/{alias}") @Path("/{alias}")
public Response removeFTPServer(@PathParam("alias") String alias) { public Response removeFTPServer(@PathParam("alias") String alias) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment