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

save

parent d94d1ff6
Branches
Tags
No related merge requests found
......@@ -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) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment