VB 2005 - Fazendo o download de arquivos via FTP


Se você pretende efetuar o download de arquivos usando o protocolo FTP (File Transfer Protocol) em suas aplicações Visual Basic vai adorar a facilidade com a qual a nova versão da plataforma .NET permite realizar esta árdua tarefa.

Obs: O significado de FTP é File Transfer Protocol, ou traduzindo, Protocolo de Transferência de Arquivos. É a meio de transferência de arquivos de diversos formatos, sendo este uma foto, um texto, um artigo científico, uma página de intenet, um programa, uma mp3, de um computador remoto para o seu micro e vice-versa.

Basta você referenciar o namespace System.Net usar a classe FtpWebRequest para habilitar o protocolo FTP em suas aplicações.

A classe FtpWebRequest fornece uma maneira simples e objetiva que permite efetuar downloads de arquivos a partir de servidores FTP. O processo funciona bem tanto para FTP anônimo como quando você precisa informar um usuário e senha.

Vamos mostrar na prática como usar estes recursos em uma pequena aplicação feita no VB 2005 Express Edition.

Inicie o VB 2005 Express Edition e crie um novo projeto chamado vbFTpNet e no formulário padrão, form1.vb, inclua um controle Label , uma caixa de texto chamada txtArq e um botão de comando chamado btnFtp.

Faça a referência ao namespace System.Net e ao namespace System.IO no projeto através da declaração:

imports System.Net
Imports System.IO

No evento Click do botão de comando - btnFtp - inclua o seguinte código:

Private Sub btnFtp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFtp.Click
Dim arquivoFonte As String

arquivoFonte = txtArq.Text

If (arquivoFonte = "") Or fonte = String.Empty Then
   MsgBox("Informe a URL completa e o nome do arquivo para download via FTP...")
End If

' ----- inicia o download via FTP
DownloadViaFtp(arquivoFonte, "anonymous", "seu@endereçode-email")

End Sub

Neste evento estamos efetuando a chamada ao método DownloadViaFtp passando as informações necessárias, onde arquivoFonte é o caminho completo do arquivo para o qual desejamos efetuar o download, e , deve estar localizado em um servidor FTP; anonymous indica que estamos efetuando o download via FTP anônimo , neste caso, o seu endereço eletrônico pode ser usado como senha.

OBS: O login Anônimo irá automaticamente conectar-se ao servidor como um usuário anônimo, preenchendo automaticamente o ID do usuário e, como senha, o endereço de e-mail especificado.

Vejamos a seguir o código do método DownloadViaFtp usado para realizar o serviço de Ftp do servidor:

Private Sub DownloadViaFTP(ByVal arquivoFonte As String, ByVal userName As String, ByVal password As String)

' ----- Faz o Download do arquivo definido via FTP e salva em uma pasta da aplicação
Dim readBuffer(4095) As Byte
Dim contador As Integer

Dim arquivoRequisitado As FtpWebRequest
Dim respostaFTP As FtpWebResponse
Dim respostaStream As IO.Stream
Dim arquivoSaida As IO.FileStream
Dim pastaDestino As String

' ----- Obtem local onde irá salvar o arquivo
pastaDestino = My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, My.Computer.FileSystem.GetName(arquivoFonte))

Try

' ----- Faz a conexao com o arquivo no site FTP
arquivoRequisitado = CType(FtpWebRequest.Create(New Uri(arquivoFonte)), FtpWebRequest)

arquivoRequisitado.Credentials = New NetworkCredential(userName, password)

arquivoRequisitado.KeepAlive = False
arquivoRequisitado.UseBinary = True

arquivoRequisitado.Method = WebRequestMethods.Ftp.DownloadFile

' ----- Abre um canal de transmissão para o arquivo
respostaFTP = CType(arquivoRequisitado.GetResponse, FtpWebResponse)
respostaStream = respostaFTP.GetResponseStream
arquivoSaida = New FileStream(pastaDestino, FileMode.Create)

' ----- Salva o conteúdo do arquivo de saida bloco a bloco
Do
   contador = respostaStream.Read(readBuffer, 0, readBuffer.Length)
   arquivoSaida.Write(readBuffer, 0, contador)
Loop Until contador = 0

MsgBox("Download completo! " & vbNewLine & arquivoFonte & vbNewLine & " em " & pastaDestino)

Catch ex As Exception

   MsgBox("Erro durante a realização do FTP " + vbCrLf + ex.Message)
   Return

End Try

' ----- libera recursos.
respostaStream.Close()
arquivoSaida.Flush()
arquivoSaida.Close()
respostaFTP.Close()

MsgBox("Download completo! " & vbNewLine & arquivoFonte)
End Sub

A variável arquivoRequisitado é a instância da classe FtpWebRequest que iremos usar para usar o protocolo FTP ela possui várias propriedades como Credentials e Method que fornecem o controle requerido para definir a ação FTP.

O objeto FtpWebResponse trata o fluxo de bytes relacionado ao arquivo a ser baixado e fornece um Stream para mover os bytes (respostaFTP).

O Stream de bytes é lido em um buffer em pacotes de até 4096 bytes e é escrito em seguida em um arquivo na máquina local(arquivoSaida).

As propriedades do objeto FtpWebRequest mais importantes definidas são:

Para verificar se a operação foi realizada com sucesso basta verificar a pasta da aplicação, onde fica o arquivo executável, e ver se o arquivo foi criado com sucesso.

Abaixo temos o formulário do projeto com um exemplo onde eu informe o meu endereço de ftp no yahoo:

Obs: Você pode implementar os demais comandos FTP :  rename, GetFileSize, MakeDir  baseando-se neste exemplo .

Pegue o código completo do projeto aqui : vbFTPNet.zip

Simples, direto e objetivo: VB 2005.

Até o próximo artigo...


José Carlos Macoratti