Caminho mais fácil
A maneira mais comum de fazer upload de um arquivo para um servidor FTP usando o .NET framework é usando o 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");
Opções avançadas
Se precisar de um controle maior, que WebClient
não oferece (como criptografia TLS / SSL , modo ASCII, modo ativo, etc), use FtpWebRequest
. A maneira fácil é apenas copiar um FileStream
para um fluxo de 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);
}
Monitoramento de progresso
Se você precisar monitorar o progresso de um upload, deverá copiar o conteúdo por partes você mesmo:
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 o progresso da GUI (WinForms ProgressBar
), consulte o exemplo C # em:
Como podemos mostrar a barra de progresso para upload com FtpWebRequest
Carregando pasta
Se você deseja carregar todos os arquivos de uma pasta, consulte
Carregar diretório de arquivos para o servidor FTP usando WebClient .
Para um upload recursivo, consulte
Upload recursivo para o servidor FTP em C #