VB .NET - Download de arquivos com WebClient (revisitado)
Neste artigo eu vou mostrar como podemos baixar arquivos usando a classe WebClient usando a linguagem VB .NET. |
Existem muitas formas de realizar o download de arquivos, e, uma delas, é usar a classe WebClient do namespace System.net para efetuar download e upload de arquivos na internet. Ela é uma alternativa à classe WebRequest que usamos para mostrar como fazer download via HTTP no artigo:
A classe WebClient fornece métodos para enviar dados ou receber dados de qualquer recurso identificado pela URI ; seja local , intranet ou internet.
Ela , na verdade , usa a classe WebRequest para fornecer acesso aos recursos da internet. Instâncias da classe WebClient podem acessar dados com qualquer WebRequest registrados com o método WebRequest.RegisterPrefix.
A plataforma .NET Framework suporta por padrão URIs que começam com : http , https e file:schema
A classe WebClient fornece quatro métodos para fazer o envio de arquivos para um recurso:
OpenWrite - retorna um Stream usado para enviar dados para um recurso.
UploadData - envia um array de byte para o recurso e retorna um array de byte contendo qualquer resposta.
UploadFile - envia um arquivo local para um recurso e retorna um array de btye contendo qualquer resposta.
UploadValues - envia um NameValueCollection para o recurso e retorna um array de byte contendo qualquer resposta.
A classe WebClient fornece três métodos para fazer o download de arquivos a partir de um recurso:
DownloadData - efetua o download de dados de um recurso e retorna um array de byte.
DownloadFile - faz o download de dados de um recurso para um arquivo local.
Neste artigo vou criar uma aplicação Windows Forms usando a linguagem VB .NET para fazer o download de arquivos a partir de URI informada, salvando o arquivo em um destino especificado.
O exemplo mostra também como usar a barra de progresso para indicar o andamento do download bem como o cálculo aproximado da velocidade de download e do tempo decorrido e restante para o download.
No exemplo usado vamos usar o método DownloadFileAsync para realizar o download de forma que a thread a partir da iremos usar o método não será bloqueada.
Além disso vamos usar os controles ProgressBar, ToolTip e Timer.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application;
Informe o nome Vbnet_Youtube e clique no botão OK;
A partir da ToolBox inclua no formulário os seguintes controles:
13 Labels
2 TextBoxes
1 Panel
1 ToolTip
4 Buttons
Disponha os controles conforme o leiaute da figura abaixo:
Agora vamos declarar os seguintes namespaces no formulário form1.vb:
Imports Microsoft.Win32 A seguir inclua o código abaixo no início do formulário form1.vb :
'usado para configurar a uril de download
Dim uriOrigem As Uri
Dim arquivoDestino As String
'Cria uma nova instância da classe WebClient
Dim downloading As New Net.WebClient
'Usada para gerenciar a API Timer para calcular a velocidade aproximada do download
'Contém o ID do timer
Dim timerID As IntPtr = 0
'trata o valor calculado da velocidade de download
Dim velocidadeDownload As Integer = 0
'Usado para tratar as velocidades de download maxima e media
Dim velocidadeMaxima As Integer = 1
Dim velocidadeMedia As Integer = 2
'usadas para ajusr a calcular a velocidade média
Dim contadorLoop As Integer = 0
Dim contadorByte As Integer = 0
' usada para aproximar a velocidade de download
Dim BytesAtuais As Long
Dim BytesAnteriores As Long
Dim tamanhoDownload As Long = 0
'usado para fornecer o tempo decorrido desde o inicio do download
Dim tempoInicio As Long
Dim tempoDecorrido As TimeSpan
' tenta calcular o tempo restante
Dim tempoRestante As TimeSpan
Dim tempoRestanteMedia As Double
|
A seguir vamos definir os seguintes métodos: ( nomes dos métodos já indicam oque cada um faz)
DefineTratamentoEventos
AtualizaDownload
FazDownload
DownloadTerminou
pegaDownloadEmProgresso
' Configura o tratamento de eventos do programa Sub DefineTratamentoEventos() Try 'pegaDownloadEmProgresso será disparada sempre que o método DownloadAsync atualizar o status do download do arquivo AddHandler downloading.DownloadProgressChanged, AddressOf pegaDownloadEmProgresso AddHandler downloading.DownloadFileCompleted, AddressOf DownloadTerminou 'configura o tratmento da api timer AddHandler SystemEvents.TimerElapsed, AddressOf AtualizaDownload Catch exc As Exception |
Para concluir vamos definir o código dos eventos Click dos botões de comando e dos eventos Load e FormClosing do formulário :
Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciarDownload.Click Try 'limpa os valores BytesAtuais = 0 BytesAnteriores = 0 velocidadeDownload = 0 velocidadeMaxima = 0 velocidadeMedia = 0 contadorLoop = 0 contadorByte = 0 pgbarDownload.Value = 0 'Define um novo Uniform Resource Identifier. uriOrigem = New Uri(txtOrigemDownload.Text) ' é feito uma Ping no host antes do Download lblPingHost.Text = "Ping Host: " & My.Computer.Network.Ping(uriOrigem.Host) 'Inicia o timer para a cada segundo pegar o id o qual esta sendo usado quando for matar o timer Dim saveDLG As New SaveFileDialog |
Executando o projeto iremos obter:
Pegue o projeto completo aqui : Download_Arquivos.zip
Na verdade, na verdade vos digo que
quem ouve a minha palavra, e crê naquele que me enviou, tem a vida eterna, e não
entrará em condenação, mas passou da morte para a vida.
João 5:24
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
ASP .NET - Exibindo um vídeo do YouTube dentro de ... - Macoratti.net