Vou mostrar como conectar em um servidor FTP e listar, fazer upload e download de arquivos de FTP em ASP.NET.
Listar arquivos
List<string> liArquivos = new List<string>();
//Cria comunicação com o servidor
//Definir o diretório a ser listado
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servidor.com.br/images/");
//Define que a ação vai ser de listar diretório
request.Method = WebRequestMethods.Ftp.ListDirectory;
//Credenciais para o login (usuario, senha)
request.Credentials = new NetworkCredential("usuario", "senha");
//modo passivo
request.UsePassive = true;
//dados binarios
request.UseBinary = true;
//setar o KeepAlive para true
request.KeepAlive = true;
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
//Criando a Stream para pegar o retorno
Stream responseStream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(responseStream))
{
//Adicionar os arquivos na lista
liArquivos = reader.ReadToEnd().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList<string>();
}
}
//Responder a lista dos arquivos
foreach (string item in liArquivos)
{
Response.Write(item + "<br />");
}
Download de arquivos
//Cria comunicação com o servidor
//definindo o arquivo para download
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servidor.com.br/images/logo.png");
//Define que a ação vai ser de download
request.Method = WebRequestMethods.Ftp.DownloadFile;
//Credenciais para o login (usuario, senha)
request.Credentials = new NetworkCredential("usuario", "senha");
//modo passivo
request.UsePassive = true;
//dados binarios
request.UseBinary = true;
//setar o KeepAlive para true
request.KeepAlive = true;
//criando o objeto FtpWebResponse
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
//Criando a Stream para ler o arquivo
Stream responseStream = response.GetResponseStream();
byte[] buffer = new byte[2048];
//Definir o local onde o arquivo será criado.
FileStream newFile = new FileStream("c:\\wwwroot\\exemplos\\logo.png", FileMode.Create);
//Ler o arquivo de origem
int readCount = responseStream.Read(buffer, 0, buffer.Length);
while (readCount > 0)
{
//Escrever o arquivo
newFile.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, buffer.Length);
}
newFile.Close();
responseStream.Close();
response.Close();
Upload de arquivos
//Caminho do arquivo para upload
FileInfo fileInf = new FileInfo("c:\\wwwroot\\exemplos\\logo.png");
//Cria comunicação com o servidor
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(""ftp://servidor.com.br/images/logo2.png"");
//Define que a ação vai ser de upload
request.Method = WebRequestMethods.Ftp.UploadFile;
//Credenciais para o login (usuario, senha)
request.Credentials = new NetworkCredential("usuario", "senha");
//modo passivo
request.UsePassive = true;
//dados binarios
request.UseBinary = true;
//setar o KeepAlive para false
request.KeepAlive = false;
request.ContentLength = fileInf.Length;
//cria a stream que será usada para mandar o arquivo via FTP
Stream responseStream = request.GetRequestStream();
byte[] buffer = new byte[2048];
//Lê o arquivo de origem
FileStream fs = fileInf.OpenRead();
try
{
//Enquanto vai lendo o arquivo de origem, vai escrevendo no FTP
int readCount = fs.Read(buffer, 0, buffer.Length);
while (readCount > 0)
{
//Esceve o arquivo
responseStream.Write(buffer, 0, readCount);
readCount = fs.Read(buffer, 0, buffer.Length);
}
}
finally
{
fs.Close();
responseStream.Close();
}