Mostrando entradas con la etiqueta Subir Archivo. Mostrar todas las entradas
Mostrando entradas con la etiqueta Subir Archivo. Mostrar todas las entradas

13 de julio de 2011

Cliente ftp con CSharp

//Aqui les dejo una clase completa para el manejo de archivos por FTP con CSharp
//Framework 2.0
//


using Microsoft.CSharp;
using System.Net;
using System.IO;
using System.Threading;
using System.Configuration;
using System;


public class FTP
{
public string host, user, pass;

public FTP(string host,string user,string pass)
{
this.host = host;
this.user = user;
this.pass = pass;

}



public string eliminarFichero(string fichero)
{
FtpWebRequest peticionFTP;
// Creamos una petición FTP con la dirección del fichero a eliminar
peticionFTP = (FtpWebRequest)WebRequest.Create(new System.Uri(fichero));

// Fijamos el usuario y la contraseña de la petición

peticionFTP.Credentials = new NetworkCredential (user,pass);
// ' Seleccionamos el comando que vamos a utilizar: Eliminar un fichero
peticionFTP.Method = WebRequestMethods.Ftp.DeleteFile;
peticionFTP.UsePassive = false;
try
{

FtpWebResponse respuestaFTP;
respuestaFTP = (FtpWebResponse)peticionFTP.GetResponse();
respuestaFTP.Close();

return string.Empty;
}
catch (Exception ex)
{
return ex.Message;
}
}



public Boolean existeObjeto(ref String dir)
{
FtpWebRequest peticionFTP;
//Creamos una peticion FTP con la dirección del objeto que queremos saber si existe
peticionFTP = (FtpWebRequest)WebRequest.Create(new Uri(dir));
//Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = new NetworkCredential(user, pass);
//Para saber si el objeto existe, solicitamos la fecha de creación del mismo
peticionFTP.Method =WebRequestMethods.Ftp.GetDateTimestamp ;
peticionFTP.UsePassive =false;
peticionFTP.KeepAlive = true;
try
{
//si el objeto existe, se devolvera true
FtpWebResponse respuestaFTP;
//respuestaFTP = CType(peticionFTP.GetResponse(), FtpWebResponse)
respuestaFTP = (FtpWebResponse)peticionFTP.GetResponse();

return true;
}
catch (Exception ex)
{
//si el objeto no existe, se producirá un error y al entrar por el Catch
//se devolvera falso
return false;
}

}

public String creaDirectorio(String dir)
{

FtpWebRequest peticionFTP;

// Creamos una peticion FTP con la dirección del directorio que queremos crear
peticionFTP = (FtpWebRequest) WebRequest.Create(new Uri(dir));
peticionFTP.KeepAlive = true;

// Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = new NetworkCredential(user, pass);

// Seleccionamos el comando que vamos a utilizar: Crear un directorio
peticionFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
//(FtpWebResponse) request.GetResponse();

try
{
FtpWebResponse respuesta;
respuesta = (FtpWebResponse) peticionFTP.GetResponse();
respuesta.Close();
// Si todo ha ido bien, se devolverá String.Empty
return string.Empty;

}
catch (Exception ex)
{
// Si se produce algún fallo, se devolverá el mensaje del error
return ex.Message;
}

}


public String subirFichero(String fichero, String destino, String dir )
{

FileInfo infoFichero = new FileInfo(fichero);

String uri;
uri = destino;

// Si no existe el directorio, lo creamos
String str="";
if (!existeObjeto(ref dir)) str = creaDirectorio(dir);

FtpWebRequest peticionFTP;

// Creamos una peticion FTP con la dirección del fichero que vamos a subir
peticionFTP = (FtpWebRequest) FtpWebRequest.Create(new Uri(destino));

// Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = new NetworkCredential(user, pass);

peticionFTP.KeepAlive = false;
peticionFTP.UsePassive = false;
// Seleccionamos el comando que vamos a utilizar: Subir un fichero
peticionFTP.Method = WebRequestMethods.Ftp.UploadFile;

// Especificamos el tipo de transferencia de datos
peticionFTP.UseBinary = true;

// Informamos al servidor sobre el tamaño del fichero que vamos a subir
try
{
peticionFTP.ContentLength = infoFichero.Length;
}

catch (Exception ex)
{return ex.Message;}

// Fijamos un buffer de 2KB
int longitudBuffer;
longitudBuffer = 2048;
Byte[] lector = new Byte[2048] ; // esti estaba Byte (2048);
int num;

// Abrimos el fichero para subirlo
FileStream fs;
fs = infoFichero.OpenRead();
Stream escritor = null;
try
{ escritor = peticionFTP.GetRequestStream();
// Leemos 2 KB del fichero en cada iteración
num = fs.Read(lector, 0, longitudBuffer);
// num=fs.Read (lector[],0,longitudBuffer);
while (num != 0)
{
// Escribimos el contenido del flujo de lectura en el
// flujo de escritura del comando FTP
escritor.Write(lector, 0, num);
num = fs.Read(lector, 0, longitudBuffer);
}

escritor.Close();
fs.Close();
//Si todo ha ido bien, se devolverá String.Empty
return String.Empty;
}
catch (WebException ex){
if (escritor == null ) escritor.Close();
fs.Close();
// Si se produce algún fallo, se devolverá el mensaje del error
return ex.Message;
}


}

public String subirFicheroSeguimiento(String fichero, String destino , String dir )
{
FileInfo infoFichero = new FileInfo(fichero);

String uri;
uri = destino;

// Si no existe el directorio, lo creamos
if (!existeObjeto(ref dir)) {}
// Dim str As String = creaDirectorio(dir)


FtpWebRequest peticionFTP;

// Creamos una peticion FTP con la dirección del fichero que vamos a subir
peticionFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(destino));

// Fijamos el usuario y la contraseña de la petición
peticionFTP.Credentials = new NetworkCredential(user, pass);
peticionFTP.KeepAlive = false;
peticionFTP.UsePassive = false;

// Seleccionamos el comando que vamos a utilizar: Subir un fichero
peticionFTP.Method = WebRequestMethods.Ftp.UploadFile;

// Especificamos el tipo de transferencia de datos
peticionFTP.UseBinary = true;

// Informamos al servidor sobre el tamaño del fichero que vamos a subir
try
{
peticionFTP.ContentLength = infoFichero.Length;
}

catch ( Exception ex)
{
return ex.Message;
}
// Fijamos un buffer de 2KB
int longitudBuffer;
longitudBuffer = 2048;
byte[] lector = new Byte[2048];

int num;

// Abrimos el fichero para subirlo
FileStream fs;
fs = infoFichero.OpenRead();
Stream escritor = null;
try
{
escritor = peticionFTP.GetRequestStream();

// Leemos 2 KB del fichero en cada iteración
num = fs.Read(lector, 0, longitudBuffer);

while (num != 0)
{
// Escribimos el contenido del flujo de lectura en el
// flujo de escritura del comando FTP
escritor.Write(lector, 0, num);
num = fs.Read(lector, 0, longitudBuffer);
}

escritor.Close();
fs.Close();
// Si todo ha ido bien, se devolverá String.Empty
return String.Empty;
}
catch (WebException ex)
{
if (!(escritor==null)) escritor.Close();
fs.Close();
// Si se produce algún fallo, se devolverá el mensaje del error
return ex.Message;
}

}

public void descargarDirectorio(string dirD)
{
FtpWebRequest dirFtp = ((FtpWebRequest)FtpWebRequest.Create(host));

// Los datos del usuario (credenciales)
NetworkCredential cr = new NetworkCredential(user, pass);
dirFtp.Credentials = cr;


// El comando a ejecutar
dirFtp.Method = "LIST";

// También usando la enumeración de WebRequestMethods.Ftp
dirFtp.Method = WebRequestMethods.Ftp.ListDirectory;

// Obtener el resultado del comando
StreamReader reader =
new StreamReader(dirFtp.GetResponse().GetResponseStream());

// Leer el stream
string res = "";//reader.ReadLine();
//Response.Write(res);
string nuevo_dir = "";

while (!reader.EndOfStream)
{

res = reader.ReadLine();

if (res.Contains("."))
{
//Response.Write(res + "
");
bajaArchivo(host, dirD, res);
}
else
{
//Response.Write(res + "
");

nuevo_dir = dirD + res;
Directory.CreateDirectory(nuevo_dir);

listarDirRecursivo(host + res + "/", nuevo_dir + "\\", user, pass);


}

}
reader.Close();

}


private void listarDirRecursivo(string dirO, string dirD, string user, string pass)
{
FtpWebRequest dirFtp = ((FtpWebRequest)FtpWebRequest.Create(dirO));

// Los datos del usuario (credenciales)
NetworkCredential cr = new NetworkCredential(user, pass);
dirFtp.Credentials = cr;
// El comando a ejecutar
dirFtp.Method = "LIST";

// También usando la enumeración de WebRequestMethods.Ftp
dirFtp.Method = WebRequestMethods.Ftp.ListDirectory;

// Obtener el resultado del comando
StreamReader reader = new StreamReader(dirFtp.GetResponse().GetResponseStream());

// Leer el stream
string res = "";//reader.ReadLine();
//Response.Write(res);

string nuevo_dir = "";

while (!reader.EndOfStream)
{

res = reader.ReadLine();

if (res.Contains("."))
{
//Response.Write(res + "
");
bajaArchivo(dirO, dirD, res);
}
else
{
//Response.Write(res + "
");
nuevo_dir = dirD + res;
Directory.CreateDirectory(nuevo_dir);
listarDirRecursivo(dirO + res + "/", nuevo_dir + "\\", user, pass);
}


// res = reader.ReadLine();
// Response.Write(res + "
");
}
reader.Close();

// Mostrarlo.
//Console.WriteLine(res);

// Cerrar el stream abierto.

}



private void bajaArchivo(string dirO, string dirD, string archivo)
{
using (WebClient wc = new WebClient())
{
wc.Proxy = null;
wc.BaseAddress = dirO;

// Authenticate, then download a file to the FTP server.
// The same approach also works for HTTP and HTTPS.

string username = user;
string password = pass;
wc.Credentials = new NetworkCredential(username, password);
wc.DownloadFile(archivo, dirD + archivo);
}
}

public void bajaArchivoP(string dirO, string dirD, string archivo)
{
using (WebClient wc = new WebClient())
{
wc.Proxy = null;
wc.BaseAddress = dirO;

// Authenticate, then download a file to the FTP server.
// The same approach also works for HTTP and HTTPS.

string username = user;
string password = pass;
wc.Credentials = new NetworkCredential(username, password);
wc.DownloadFile(archivo, dirD);
}
}

public void subirArchivo(string rutaOrigen, string rutaDestino)
{
using (WebClient wc = new WebClient())
{
wc.Proxy = null;

// Authenticate, then download a file to the FTP server.
// The same approach also works for HTTP and HTTPS.

string username = user;
string password = pass;
wc.Credentials = new NetworkCredential(username, password);
wc.UploadFile(rutaDestino, rutaOrigen);
}

}


public Boolean verificaExitencia(string nombreObjeto)
{
FtpWebRequest dirFtp = ((FtpWebRequest)FtpWebRequest.Create(host));
Boolean respuesta = false;

// Los datos del usuario (credenciales)
NetworkCredential cr = new NetworkCredential(user, pass);
dirFtp.Credentials = cr;


// El comando a ejecutar
dirFtp.Method = "LIST";

// También usando la enumeración de WebRequestMethods.Ftp
dirFtp.Method = WebRequestMethods.Ftp.ListDirectory;

// Obtener el resultado del comando
StreamReader reader =
new StreamReader(dirFtp.GetResponse().GetResponseStream());

// Leer el stream
string res = "";//reader.ReadLine();
//Response.Write(res);

while (!reader.EndOfStream)
{
res = reader.ReadLine();

if (res == nombreObjeto)
{
respuesta= true;
}

}
reader.Close();
return respuesta;
}

}