Saltar al contenido

Subir archivo a FTP usando C#

Si encuentras algo que no entiendes puedes dejarlo en los comentarios y te ayudaremos rápidamente.

Solución:

Las respuestas existentes son válidas, pero ¿por qué reinventar la rueda y molestarse con un nivel más bajo? WebRequest tipos mientras WebClient ya implementa la carga de FTP perfectamente:

using (var client = new WebClient())

    client.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
    client.UploadFile("ftp://host/path.zip", WebRequestMethods.Ftp.UploadFile, localFile);

public void UploadFtpFile(string folderName, string fileName)


    FtpWebRequest request;

    string folderName; 
    string fileName;
    string absoluteFileName = Path.GetFileName(fileName);

    request = WebRequest.Create(new Uri(string.Format(@"ftp://0/1/2", "127.0.0.1", folderName, absoluteFileName))) as FtpWebRequest;
    request.Method = WebRequestMethods.Ftp.UploadFile;
    request.UseBinary = 1;
    request.UsePassive = 1;
    request.KeepAlive = 1;
    request.Credentials =  new NetworkCredential(user, pass);
    request.ConnectionGroupName = "group"; 

    using (FileStream fs = File.OpenRead(fileName))
    
        byte[] buffer = new byte[fs.Length];
        fs.Read(buffer, 0, buffer.Length);
        fs.Close();
        Stream requestStream = request.GetRequestStream();
        requestStream.Write(buffer, 0, buffer.Length);
        requestStream.Flush();
        requestStream.Close();
    

Cómo utilizar

UploadFtpFile("testFolder", "E:\filesToUpload\test.img");

usa esto en tu foreach

y solo necesita crear la carpeta una vez

para crear una carpeta

request = WebRequest.Create(new Uri(string.Format(@"ftp://0/1/", "127.0.0.1", "testFolder"))) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse ftpResponse = (FtpWebResponse)request.GetResponse();

La manera más fácil

La forma más trivial de cargar un archivo a un servidor FTP usando .NET framework es usando 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:localpathfile.zip");

Opciones avanzadas

Si necesitas un mayor control, eso WebClient no ofrece (como encriptación TLS/SSL, modo de transferencia de texto/ascii, modo activo, reanudación de transferencia, monitoreo de progreso, etc.), uso FtpWebRequest. La manera fácil es simplemente copiar un FileStream a un flujo 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:localpathfile.zip"))
using (Stream ftpStream = request.GetRequestStream())

    fileStream.CopyTo(ftpStream);


Seguimiento del progreso

Si necesita monitorear el progreso de una 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:localpathfile.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 el ejemplo de C# en:
¿Cómo podemos mostrar la barra de progreso para cargar con FtpWebRequest?


Cargando carpeta

Si desea cargar todos los archivos de una carpeta, consulte
Cargue el directorio de archivos al servidor FTP utilizando WebClient.

Para una carga recursiva, consulte
Carga recursiva al servidor FTP en C#

Calificaciones y reseñas

¡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 *