jueves, 8 de enero de 2009

Usar el protocolo samba con jCIFS

En el proyecto donde estoy colaborando hay una aplicación que necesita escribir archivos en un directorio compartido en un servidor windows por lo que necesitamos usar el protocolo CIFS/SMB, bien para esto tenemos la librería jCIFS que es una implementación de dicho protocolo y esta hecha en java completamente además de que es opensource.

También es posible usar esta librería para compartir recursos entre maquinas windows y máquinas unix que cuenten con el servicio samba.

Por ejemplo en este metodo escribimos un archivo en la carpeta compartida por otra maquina:

private boolean escribeArchivo(String encodedMessage, String nombreArchivo)
throws SmbException, MalformedURLException, UnknownHostException, IOException{

boolean exitoArchivo = false;

//String url = "smb://127.0.0.1/compartida/"+ nombreArchivo ;
//String url = "smb://usuario:usuario@127.0.0.1/compartida/"+ nombreArchivo ;
String url = "smb://"+ USR_SERVIDOR +":"+ PASS_SERVIDOR +"@"
+ URL_SERVIDOR + nombreArchivo + EXT_ARCHIVO;

try{
SmbFileOutputStream out = new SmbFileOutputStream(url, false);

out.write(encodedMessage.getBytes());
// encodeMessage es el texto que contiene el archivo
// aqui podemos enviar los bytes de algun archivo de la maquina local

out.close();

exitoArchivo = true;

System.out.println("generado " + url );
} catch(IOException ex){
exitoArchivo = false;
} finally{
return exitoArchivo;
}
}


Para borrar un archivo en la carpeta compartida:

private void borraArchivo(String archivo) throws SmbException,
MalformedURLException, UnknownHostException{

//String url = "smb://127.0.0.1/compartida/"+ nombreArchivo ;
//String url = "smb://usuario:usuario@127.0.0.1/compartida/"+ nombreArchivo ;
String url = "smb://"+ USR_SERVIDOR +":"+ PASS_SERVIDOR +"@"+ URL_SERVIDOR ;
String rutArchivo = url + archivo;
SmbFile sFile = new SmbFile(rutArchivo);
if(sFile.exists())
sFile.delete();
}



Para descargar la libreria y un poco de mas informacion pues sigan este link
http://jcifs.samba.org/

2 comentarios:

Argiva Nero dijo...

Mil graciaaas por tu aportación, actualmente estoy trabajando con un proyecto similar! Me gustaria contactarte para ke me kompartieras más sobre este articulo. mi correo es
argiva2nero@gmail.com, por favor escribeme!. Me urge apender jcifs. Grax

Anónimo dijo...

Gracias por la información pero tengo una duda, ya se que el post lleva mucho tiempo escrito, pero me ha surgido ahora la duda para mi trabajo.

Tengo la aplicación en linux y necesito guardar desde ahí un pdf en una carpeta compartida de windows. La carpeta tiene acceso a todos los usuarios y no tiene contraseña. Como puedo evitar el

jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password. ??

Si no necesita ni pass ni usuario.

Muchas gracias!