sábado, 27 de mayo de 2017

Como conectarse a un FTP con JSch y resolver la excepción: No such file

Este es un error un poco chorra, pero de paso lo podemos usar como excusa para poner un ejemplo de como conectarse a un SFTP a través de Java. 

Para empezar pondremos el ejemplo de como podemos conectarnos a un SFTP a través de Java. Para ello haremos uso de la librería JSch. Hay otras librerías como 'commons-vsf2' de apache, pero el código con ellas no estan intuitivo y además por debajo acaban usando JSch

JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, port);
Properties config = new Properties();
session.setConfig(config);
//Si quieres conectar con usuario/contraseña
session.setPassword(password);
//Si quieres conectar con clave ssh, comenta la anterior y descomenta esta
//jsch.addIdentity(identity);
//config.put("StrictHostKeyChecking", "no");
//... Conectar con el SFTP
session.connect();
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
//... Subir un fichero
sftpChannel.get(sourcePath, destinationPath)
//... Bajar un fichero
sftpChannel.put(sourcePath, destinationPath);

Ahora vamos con el error, que era el siguiente:


  2: No such file
  at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
  at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:594)
  at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475)
  at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365)

El error es mas o menos evidente en cuanto a su descripción, y  es básicamente que no encuentra el fichero. El asunto es.. ¿Porque no lo encuentra?. Puede ser por alguno de los siguientes casos:

  • Si la ruta del FTP empieza por '/' indica que es una ruta absoluta 
  • Si la ruta del FTP no comienza por '/' indica que es una ruta relativa en base a la carpeta del usuario que se conecta a dicho FTP
  • Puede ser que directamente la carpeta no exista en el FTP (como fue mi caso). 

No hay comentarios:

Publicar un comentario