La manera más fácil
La forma más trivial de subir un archivo a un servidor FTP usando .NET framework es usando el WebClient.UploadFile
método :
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", @"C:\local\path\file.zip");
Opciones avanzadas
Si necesita un mayor control, que WebClient
no ofrece (como cifrado TLS / SSL , modo ASCII, modo activo, etc.), utilice FtpWebRequest
. Una forma fácil es simplemente copiar FileStream
a en una transmisión FTP usando Stream.CopyTo
:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
fileStream.CopyTo(ftpStream);
}
Seguimiento del progreso
Si necesita monitorear el progreso de una carga, debe copiar el contenido por partes usted mismo:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
byte[] buffer = new byte[10240];
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, read);
Console.WriteLine("Uploaded {0} bytes", fileStream.Position);
}
}
Para el progreso de la GUI (WinForms ProgressBar
), vea el ejemplo de C # en:
¿Cómo podemos mostrar la barra de progreso para cargar con FtpWebRequest?
Subiendo carpeta
Si desea cargar todos los archivos de una carpeta, consulte
Cargar directorio de archivos al servidor FTP mediante WebClient .
Para una carga recursiva, consulte
Carga recursiva al servidor FTP en C #