Código fuente que explica cómo subir un archivo a un servidor FTP utilizando C#

Si deseamos subir archivos a un servidor FTP con C #, podemos utilizar la clase FtpWebRequest del espacio de nombre System.Net del .NET Framework .
La utilización es bastante sencilla, simplemente creamos una solicitud sobre el servidor FTP indicando el nombre de archivo que tendrá el servidor remoto:
FtpWebRequest ftpRequest = (FtpWebRequest) WebRequest.Create("ftp://servidorFTP/directorio/archivo.txt"); -
Una vez creada la conexión asignamos las credenciales e indicamos que deseamos enviar un archivo y algunas propiedades básicas:
// Asigna las credenciales ftpRequest.Credentials = new NetworkCredential("usuario", "Password"); // Asigna las propiedades ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; ftpRequest.UsePassive = true; ftpRequest.UseBinary = true; ftpRequest.KeepAlive = false;
Y por último leemos el archivo en un stream y lo escribimos en el stream de FTP (para obtener el stream de comunicaciones utilizamos el método GetRequestStream del objeto FtpWebRequest ):
using (FileStream stmFile = File.OpenRead(strFileNameLocal)) { // Obtiene el stream sobre la comunicación FTP using (Stream stmFTP = ftpRequest.GetRequestStream()) { byte[] arrBytBuffer = new byte[cnstIntLengthBuffer]; int intRead; // Lee y escribe el archivo en el stream de comunicaciones while ((intRead = stmFile.Read(arrBytBuffer, 0, cnstIntLengthBuffer)) != 0) stmFTP.Write(arrBytBuffer, 0, intRead); // Cierra el stream FTP stmFTP.Close(); } // Cierra el stream del archivo stmFile.Close(); }
El siguiente bloque muestra el código completo en un único método:
////// Envía un archivo por FTP /// public void Upload(string strServer, string strUser, string strPassword, string strFileNameLocal, string strPathFTP) { FtpWebRequest ftpRequest; // Crea el objeto de conexión del servidor FTP ftpRequest = (FtpWebRequest) WebRequest.Create(string.Format("ftp://{0}/{1}", strServer, Path.Combine(strPathFTP, Path.GetFileName(strFileNameLocal)))); // Asigna las credenciales ftpRequest.Credentials = new NetworkCredential(strUser, strPassword); // Asigna las propiedades ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; ftpRequest.UsePassive = true; ftpRequest.UseBinary = true; ftpRequest.KeepAlive = false; // Lee el archivo y lo envía using (FileStream stmFile = File.OpenRead(strFileNameLocal)) { // Obtiene el stream sobre la comunicación FTP using (Stream stmFTP = ftpRequest.GetRequestStream()) { byte[] arrBytBuffer = new byte[cnstIntLengthBuffer]; int intRead; // Lee y escribe el archivo en el stream de comunicaciones while ((intRead = stmFile.Read(arrBytBuffer, 0, cnstIntLengthBuffer)) != 0) stmFTP.Write(arrBytBuffer, 0, intRead); // Cierra el stream FTP stmFTP.Close(); } // Cierra el stream del archivo stmFile.Close(); } }
Nota: si desea información sobre cómo descargar un archivo de un servidor FTP lea el artículo: descargar archivo FTP .