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:

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:


José Carlos Macoratti