vtortola.NET Logo
Enviar un archivo por FTP

Enviar un archivo por FTP

por vtortola viernes, 31 de agosto de 2007

Puede resultar muy útil que nuestra aplicación pueda enviar los resultados de sus acciones o depositarlos en un servidor FTP, nos puede servir tanto para enviar periódicamente archivos de log, resultados, estadísticas o cualquier otro tipo de fichero.

Este es un sencillo ejemplo de una función que envia un archivo por FTP a un determinada ruta remota:

 

public void UploadFTP(string FilePath, string RemotePath, string Login, string Password)
{
    using (FileStream fs = new FileStream(FilePath,FileMode.Open,FileAccess.Read,FileShare.Read))
    {
        string url = Path.Combine(RemotePath, Path.GetFileName(FilePath));
 
        // Creo el objeto ftp
        FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(url);
 
        // Fijo las credenciales, usuario y contraseña
        ftp.Credentials = new NetworkCredential(Login, Password);
 
        // Le digo que no mantenga la conexión activa al terminar.
        ftp.KeepAlive = false;
 
        // Indicamos que la operación es subir un archivo...
        ftp.Method = WebRequestMethods.Ftp.UploadFile;
 
        // … en modo binario … (podria ser como ASCII)
        ftp.UseBinary = true;
 
        // Indicamos la longitud total de lo que vamos a enviar.
        ftp.ContentLength = fs.Length;
 
        // Desactivo cualquier posible proxy http.
        // Ojo pues de saltar este paso podría usar 
        // un proxy configurado en iexplorer
        ftp.Proxy = null;
 
        // Pongo el stream al inicio
        fs.Position = 0;
 
        // Configuro el buffer a 2 KBytes
        int buffLength = 2048;
        byte[] buff = new byte[buffLength];
 
        int contentLen;
 
        // obtener el stream del socket sobre el que se va a escribir.
        using (Stream strm = ftp.GetRequestStream())
        {
            // Leer del buffer 2kb cada vez
            contentLen = fs.Read(buff, 0, buffLength);
 
            // mientras haya datos en el buffer ….
            while (contentLen != 0)
            {
                // escribir en el stream de conexión
                //el contenido del stream del fichero
                strm.Write(buff, 0, contentLen);
                contentLen = fs.Read(buff, 0, buffLength);
            }
        }
    }
}

Para invocarlo, simplemente hay que pasarle los datos necesarios:

UploadFTP(@"C:\Archivo.txt", "ftp://ftp.vtortola.net/Upload", "MiUsuario", "MiPassword");

Hay que recordad que FTP es un protocolo inseguro, pues establece una comunicación sin cifrar tanto para la autenticación como para el control. Una mejor opción es usar FtpWebRequest.EnableSsl como podemos ver en este blog de Adarsh, pero claro, nuestro servidor FTP tiene que soportar la comunicación SSL (que no es el caso del mio :D).

Actualmente calificado 4.5 por 11 persona(s)

  • Currently 4,454545/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

.NET 2.0 | C# 2.0

Related posts

Comentarios

septiembre 2. 2007 02:52

trackback

Trackback from vtortola

Enviar un Stream por FTP

vtortola

octubre 4. 2007 20:46

trackback

Trackback from vtortola

Descargando un fichero por FTP

vtortola

noviembre 3. 2007 08:57

Gravatar

Muchas gracias vortola, es exactamente lo que estaba buscando ^^
ahora solo me falta utilizarlo para complementar el proyecto que estoy realizando.
Saludos.

Jorge Fragoza mx

Comments are closed

Powered by BlogEngine.NET 1.1.1.8
This theme is a variation of Mads Kristensen by Valeriano Tórtola

Valeriano Tórtola

Personal Ver perfil
E-mail Enviar correo
LinkedIn LinkedIn
Fotos Fotos
MCPD

Publicidad

Posts recientes

Disclaimer

Las opiniones mostradas aqui son mis opniones y no representan el punto de vista de mi empresa en ninguna forma.

Creative Commons License

Esta obra está bajo una licencia de Creative Commons

Locations of visitors to this page

© Copyright 2010

Sign in

Calendario

<<  marzo 2010  >>
lumamijuvido
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

Ver en calendario extendido