C# - Upload de arquivos para servidor via FTP
O artigo de hoje vai mostrar como fazer o upload de arquivos via FTP em uma aplicação Windows Forms com C#. |
Na plataforma .NET temos suporte a FTP através da classe FtpWebRequest que implementa um cliente de protocolo FTP.
Para obter uma instância de FtpWebRequest, use o método Create. Você também pode usar a classe WebClient para fazer upload e download de informações de um servidor FTP.
Usando qualquer uma dessas abordagens, quando você especificar um recurso de rede que usa o esquema FTP (por exemplo, "ftp://contoso.com") a classe FtpWebRequest fornece a capacidade de interagir programaticamente com servidores de FTP.
Você deve ter um nome de usuário válido e a senha para o servidor FTP ou o servidor deve permitir logon anônimo.
Você pode especificar as credenciais usadas para conectar ao servidor, definindo a propriedade Credentials ou você pode incluí-los na parte UserInfo da URI passada para o método Create. Se você incluir as informações UserInfo na URI, a propriedade Credentials será definida como uma nova credencial de rede com as informações do nome do usuário e e senha especificados.
Você deve ter acesso aos recursos HTTP (WebPermission) para acessar o recurso FTP de outra forma será lançada uma exceção SecurityException.
Se a propriedade Proxy for definida, seja diretamente ou em um arquivo de configuração, a comunicação com o servidor FTP será feita através do proxy definido.
Se for um proxy HTTP somente os comandos DownloadFile, ListDirectory, e ListDirectoryDetails serão suportados.
Recursos usados :
Criando a solução no VS 2013 Express Edition
Abra o VS 2013 Express for Windows desktop e clique em New Project;
A seguir selecione Visual C# -> Windows Forms Application;
Informe o nome Upload_ftp e clique no botão OK;
No formulário form1.cs do projeto vamos incluir os seguintes controles a partir da ToolBox:
4 Labels
4 TextBox - txtURL, txtUsuario, txtSenha, txtArquivo
2 Buttons - btnLocalizar e btnUpload
1 Label - lblmsg
Disponha os controles no formulário conforme o leiaute da figura abaixo:
Vamos criar duas classes em nosso projeto. Uma para definir o nosso domínio que é o upload e outra para enviar o arquivo.
No menu PROJECT clique em Add Class e informe o nome Upload. A seguir defina o código abaixo nesta classe:
namespace Upload_Ftp
{
public class Upload
{
public string usuario { get; set; }
public string senha { get; set; }
public string url { get; set; }
public string arquivo { get; set; }
}
}
|
Repita o procedimento acima e crie a classe ArquivosWeb com o seguinte código:
using System.IO;
using System.Net;
namespace Upload_Ftp
{
public class ArquivosWeb
{
public static void FtpUploadArquivo(Upload upld)
{
try
{
// Pega o objeto usado para se comunicar com o servidor
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(upld.url);
request.Method = WebRequestMethods.Ftp.UploadFile;
// Obtem as credenciais de rede
request.Credentials = new NetworkCredential(upld.usuario, upld.senha);
// Le o conteúdo do arquivo em um array de bytes
byte[] bytes = System.IO.File.ReadAllBytes(upld.arquivo);
// escreve os bytes em um request stream.
request.ContentLength = bytes.Length;
using (Stream request_stream = request.GetRequestStream())
{
request_stream.Write(bytes, 0, bytes.Length);
request_stream.Close();
}
}
catch
{
throw;
}
}
}
}
|
No evento Load do formulário form1.cs inclua o código que define a altura e largura padrão do formulário:
private void Form1_Load(object sender, EventArgs e)
{
this.Width = 475;
this.Height = 266;
}
|
Agora no evento Click do botão de comando btnLocalizar inclua o código para usuário selecionar um arquivo para enviar:
private void btnLocalizar_Click(object sender, EventArgs e) { OpenFileDialog ofd1 = new OpenFileDialog(); ofd1.CheckFileExists = true; ofd1.Multiselect = false; if (ofd1.ShowDialog() == DialogResult.OK)
{
txtArquivo.Text = ofd1.FileName;
}
}
|
Agora no evento Click do botão Upload inclua o código abaixo:
private void btnUpload_Click(object sender, EventArgs e)
{
Upload upload = new Upload();
if (!string.IsNullOrWhiteSpace(txtURL.Text) || !string.IsNullOrWhiteSpace(txtSenha.Text)
|| !string.IsNullOrWhiteSpace(txtUsuario.Text) || !string.IsNullOrWhiteSpace(txtArquivo.Text) )
{
upload.url = txtURL.Text;
upload.usuario = txtUsuario.Text;
upload.senha = txtSenha.Text;
upload.arquivo = txtArquivo.Text;
try
{
this.Cursor = Cursors.WaitCursor;
lblmsg.Text = "Enviando arquivo...";
Application.DoEvents();
ArquivosWeb.FtpUploadArquivo(upload);
lblmsg.Text = "Arquivo Enviado...";
}
catch (Exception ex)
{
this.Width = 475;
this.Height = 347;
lblmsg.Text = "Erro ao enviar arquivo..: " + ex.Message;
}
finally
{
this.Cursor = Cursors.Default;
}
}
else
{
MessageBox.Show("Dados inválidos, verifique... " , "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
Neste código validamos a entrada do usuário e a seguir preenchemos o objeto Upload com as informações passando o objeto para o método FtpUploadArquivo();
Pegue o projeto completo aqui : Upload_Ftp.zip
Jesus
lhes respondeu, e disse: A minha doutrina não é minha, mas daquele que me
enviou.
Se alguém quiser fazer a vontade dele, pela mesma doutrina conhecerá se ela é de
Deus, ou se eu falo de mim mesmo.
João 7:16,17
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: