Enviar un archivo por FTP

by Valeriano Tortola 1. septiembre 2007 09:00

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).

Tags: , ,

.NET 2.0 | C# 2.0

Comentarios

02/09/2007 12:52:45 #

trackback

Trackback from vtortola

Enviar un Stream por FTP

vtortola |

05/10/2007 6:46:51 #

trackback

Trackback from vtortola

Descargando un fichero por FTP

vtortola |

03/11/2007 18:57:09 #

Jorge Fragoza

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

Jorge Fragoza México |

Comentarios no permitidos