Saltar al contenido

FtpWebRequest Descargar archivo

Por fin luego de mucho luchar hemos encontrado la respuesta de este inconveniente que muchos los lectores de nuestro sitio han presentado. Si tienes algún dato que compartir puedes aportar tu información.

Solución:

Sé que esta es una publicación antigua, pero la estoy agregando aquí para futuras referencias. Aquí hay una solución que encontré:

    private void DownloadFileFTP()
    
        string inputfilepath = @"C:TempFileName.exe";
        string ftphost = "xxx.xx.x.xxx";
        string ftpfilepath = "/Updater/Dir1/FileName.exe";

        string ftpfullpath = "ftp://" + ftphost + ftpfilepath;

        using (WebClient request = new WebClient())
        
            request.Credentials = new NetworkCredential("UserName", "[email protected]");
            byte[] fileData = request.DownloadData(ftpfullpath);

            using (FileStream file = File.Create(inputfilepath))
            
                file.Write(fileData, 0, fileData.Length);
                file.Close();
            
            MessageBox.Show("Download Complete");
        
    

Actualizado basado en una excelente sugerencia de Ilya Kogan

La manera más fácil

La forma más trivial de descargar un archivo binario desde un servidor FTP usando .NET Framework es usando WebClient.DownloadFile:

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

Opciones avanzadas

Usar FtpWebRequestsolo si necesitas un mayor control, que WebClient no ofrece (como encriptación TLS/SSL, monitoreo de progreso, modo de transferencia de texto/ascii, reanudación de transferencias, etc.). La manera fácil es simplemente copiar un flujo de respuesta FTP a FileStream 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.DownloadFile;

using (Stream ftpStream = request.GetResponse().GetResponseStream())
using (Stream fileStream = File.Create(@"C:localpathfile.zip"))

    ftpStream.CopyTo(fileStream);


Seguimiento del progreso

Si necesita monitorear el progreso de una 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:localpathfile.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), ver:
FtpWebRequest Descarga FTP con ProgressBar


Descargando carpeta

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

Este párrafo de la referencia de la clase FptWebRequest podría ser de su interés:

El URI puede ser relativo o absoluto. Si el URI tiene el formato “ftp://contoso.com/%2fpath” (%2f es un ‘/’ con escape), entonces el URI es absoluto y el directorio actual es /path. Sin embargo, si el URI tiene el formato “ftp://contoso.com/ruta”, primero .NET Framework inicia sesión en el servidor FTP (usando el nombre de usuario y la contraseña establecidos por la propiedad Credenciales), luego el directorio actual se establece en /ruta.

Reseñas y calificaciones del post

Ten en cuenta mostrar este post si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *