write net ejemplo data conectar asp c# upload ftp download ftpwebrequest

c# - net - Cargar archivo y descargar archivo desde FTP



upload file to ftp folder c# (3)

Estoy intentando crear un programa que cargue / descargue archivos .exe en un FTP

Intenté usar FtpWebRequest , pero solo puedo cargar y descargar archivos .txt.

Luego encontré aquí una solución para descargar usando el WebClient :

WebClient request = new WebClient(); request.Credentials = new NetworkCredential("username", "password"); byte[] fileData = request.DownloadData("ftp://myFTP.net/"); FileStream file = File.Create(destinatie); file.Write(fileData, 0, fileData.Length); file.Close();

Esta solución funciona Pero vi que WebClient tiene un método DownloadFile que no funcionó. Creo que porque no funciona en FTP solo en HTTP . ¿Mi suposición es cierta? Si no, ¿cómo puedo hacer que funcione?

¿Y hay alguna otra solución para subir / descargar un archivo .exe a ftp usando FtpWebRequest ?



Cargar es fácil ...

void Upload(){ Web client = new WebClient(); client.Credentials = new NetworkCredential(username, password); client.BaseAddress = "ftp://ftpsample.net/"; client.UploadFile("sample.txt", "sample.txt"); //since the baseaddress } La descarga también es fácil ... El código que hice a continuación usa BackgroundWorker (por lo que no congela la interfaz / aplicación cuando se inicia la descarga). Además, acorté el código con el uso de lambda (=>) .

void Download(){ Web client = new WebClient(); client.Credentials = new NetworkCredential(username, password); BackgroundWorker bg = new BackgroundWorker(); bg.DoWork += (s, e) => { client.DownloadFile("ftp://ftpsample.net/sample.zip", "sample.zip"); }; bg.RunWorkerCompleted += (s, e) => { //when download is completed MessageBox.Show("done downloading"); download1.Enabled = true; //enable download button progressBar.Value = 0; // reset progressBar }; bg.RunWorkerAsync(); download1.Enabled = false; //disable download button while (bg.IsBusy) { progressBar.Increment(1); //well just for extra/loading Application.DoEvents(); //processes all windows messages currently in the message queue } }

También puede usar el método DownloadFileAsync para mostrar la descarga real del archivo de progreso:

client.DownloadFileAsync(new Uri("ftp://ftpsample.net/sample.zip"), "sample.zip"); client.DownloadProgressChanged += (s, e) => { progressBar.Value = e.ProgressPercentage; //show real download progress }; client.DownloadFileCompleted += (s, e) => { progressBar.Visible = false; // other codes after the download }; //You can remove the ''while'' statement and use this ^


Tanto WebClient.UploadFile como WebClient.DownloadFile funcionan correctamente tanto para FTP como para archivos binarios.

Subir

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");

Si necesita un mayor control, que WebClient no ofrece (como cifrado TLS / SSL, modo de transferencia ascii / texto, etc.), utilice FtpWebRequest . La forma más fácil es simplemente copiar una secuencia de FileStream a 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); }

Si necesita monitorear un progreso de carga, debe copiar los contenidos 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 ), consulte:
¿Cómo podemos mostrar la barra de progreso para cargar con FtpWebRequest?

Si desea cargar todos los archivos de una carpeta, consulte
Subir el directorio de archivos usando WebClient .

Descargar

WebClient client = new WebClient(); client.Credentials = new NetworkCredential("username", "password"); client.DownloadFile( "ftp://ftp.example.com/remote/path/file.zip", @"C:/local/path/file.zip");

Si necesita un mayor control, que WebClient no ofrece (como cifrado TLS / SSL, modo de transferencia ascii / texto, etc.), utilice FtpWebRequest . La manera más fácil es simplemente copiar una secuencia de respuesta de FTP a FileStream utilizando 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.DownloadFile; using (Stream ftpStream = request.GetResponse().GetResponseStream()) using (Stream fileStream = File.Create(@"C:/local/path/file.zip")) { ftpStream.CopyTo(fileStream); }

Si necesita monitorear un progreso de descarga, debe copiar los contenidos 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.DownloadFile; using (Stream ftpStream = request.GetResponse().GetResponseStream()) using (Stream fileStream = File.Create(@"C:/local/path/file.zip")) { byte[] buffer = new byte[10240]; int read; while ((read = ftpStream.Read(buffer, 0, buffer.Length)) > 0) { fileStream.Write(buffer, 0, read); Console.WriteLine("Downloaded {0} bytes", fileStream.Position); } }

Para el progreso de la GUI (WinForms ProgressBar ), consulte:
FtpWebRequest Descarga de FTP con ProgressBar

Si desea descargar todos los archivos de una carpeta remota, consulte
C # Descargar todos los archivos y subdirectorios a través de FTP .