File Download – Codice VB.NET


Codice VB.NET / lunedì, 14 Dicembre, 2015

File Download: ovvero scaricare un file che si trova online, da un server al nostro pc o a quello dell’utente, tramite codice vbnet.

Introduzione

A volte abbiamo la necessità di scaricare un file che si trova su un server online: ad esempio estrazioni del superenalotto oppure dati metereologici etc. A volte ancora si ha bisogno di un file download per aggiornamenti al nostro software. A questo proposito, la funzione seguente ci potrà dare senz’altro una mano.

Public Function IngAC_FILE_DOWNLOAD(ByVal URL_File As String,
                                        ByVal Percorso_File As String,
                                        Modalita_Errore As Boolean) As Byte
        Try
            Dim Richiesta As Net.HttpWebRequest = Net.HttpWebRequest.Create(URL_File)
            Dim Risposta As Net.HttpWebResponse = Richiesta.GetResponse()
            Dim Reader As IO.Stream = Risposta.GetResponseStream()
            Dim Writer As New IO.FileStream(Percorso_File, IO.FileMode.Create)
            Dim Buffer(8192) As Byte
            Dim BytesRead As Long
 
            BytesRead = Reader.Read(Buffer, 0, Buffer.Length)
            Do While BytesRead > 0
                Application.DoEvents()
                Writer.Write(Buffer, 0, BytesRead)
                BytesRead = Reader.Read(Buffer, 0, Buffer.Length)
            Loop
            Reader.Close()
            Writer.Close()
            Risposta = Nothing
            Richiesta = Nothing
        Catch ex As Exception
            If Modalita_Errore Then MsgBox("Errore :" & ex.Message)
            Return 1
        End Try
        Return 0
    End Function

Come funziona “File Download”

La funzione IngAC_FILE_DOWNLOAD(ByVal URL_File As String, ByVal Percorso_File As String, Modalita_Errore As Boolean) As Byte crea una richiesta http per l’indirizzo URL_File, a questo punto invia la Richiesta a ottiene la Risposta e uno stream di rete dal quale si potrà leggere il file richiesto.

Si procede col creare un nuovo file in locale (Percorso_File) e il buffer di byte (8129 sembra andare bene, ma può essere ulteriormente aumentato) che contiene i blocchi letti dallo stream. La lettura a blocchi è più conveniente che trasferire in massa tutto il contenuto, poiché altrimenti si dovrebbe usare un buffer di almeno le dimensioni del file.

La funzione Read restituisce come risultato il numero di byte effettivamente letti dallo stream. Il loop permette il download di tutto il file, e la successiva scrittura; il tutto dentro un try-catch-end try al fine di prevenire errori, che eventualmente saranno mostrati da un msgbox se modalita_errore è settata su true. La funzione restituisce zero se il tutto ha esito positivo; restituisce “uno” nel caso di errore.

Nota: ricordarsi di Imports System.IO in testa al listato, per poter usare la funzione IngAC_FILE_DOWNLOAD().

Link utili:

File Download - Codice VB.NET
File Download – Codice VB.NET