C# Effettuare il download di un file tramite .Net 5.0

Articolo introduttivo alla gestione web, che spiega come effettuare il download dei file.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come effettuare in un progetto di tipo Windows Application con versione Framework 5.0, il download di un file situato in un sito web nel proprio pc.
Il codice illustrato in questo articolo è applicabile anche per applicazioni di tipo Web in particolare con la tecnologia Asp.Net, e l’ambiente di sviluppo utilizzato è Visual Studio 2019 community .

Creazione del progetto

Con l’ambiente di sviluppo Visual Studio 2019 Community o versione precedente o successiva, creare un nuovo progetto di tipo Windows Application tramite il modello App Windows Forms, selezionare come versione del Framework la 5 o versione successive nel caso si ha installati sul proprio PC la 6.
Assegnare un nome al progetto ed all'apertura della form che viene visualizzata inserire un controllo di tipo button.
Il pulsante avrà il compito di richiamare le istruzioni per effettuare il download di un file.
Impostare la proprietà “Name” con il valore “btnDownload”.


Stesura del codice

Dopo aver creato il progetto e preparato la form non resta che scrivere il codice per il download del file.
Passiamo in visualizzazione codice della nostra form (f7 o tramite la voce visualizza codice) ed in alto sopra ad ogni istruzione, scriviamo lo spazio dei nomi per la gestione del download e creazione del file.

Lo spazio dei nomi contenente le classi per il download dei file si trovano in System.Net mentre per la gestione dei file e la relativa creazione si trovano in System.Io.
Qui di seguito le dichiarazioni per aggiungere lo spazio dei nomi per la gestione del download dei file e la relativa creazione.

C#
using System.Net;
using System.IO;

Passiamo in visualizzazione grafica e nella form, facciamo doppio click sul controllo di tipo “button” che abbiamo posizionato in precedenza in modo che passiamo in visualizzazione codice nell’evento click del pulsante.
Nell’evento click utilizzeremo le classi per la gestione delle richieste web, in particolar modo le classi WebRequest, httpwebRequest , httpwebResponse e le classi per la gestione dei file quali stream, MemoryStream e File.
Qui di seguito il frammento di codice per l’evento click del pulsante, per il download e creazione del file.

C#
private void BtnDownload_Click(object sender, EventArgs e)
{
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create("http://www.sito.it/file.zip");
httpRequest.Method = WebRequestMethods.Http.Get;
HttpWebResponse httpResponse   = (HttpWebResponse)httpRequest.GetResponse();
using (Stream stream = httpResponse.GetResponseStream())
{
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
byte[] arrayByte = ms.ToArray();
File.WriteAllBytes("C:\\Varie\\test.zip", arrayByte);
}
MessageBox.Show("Download completato.");
}

Come si è visto dal precedente codice, tramite il metodo GetResponse otteniamo la risposta dalla richiesta web, con il quale possiamo ottenere lo stream dati tramite il metodo “GetResponseStream” . L’oggetto di tipo Stream, viene trasformato in un oggetto di tipo ArrayByte per poi creare un file su un percorso del proprio pc.
Nel caso che invece il sito ha un certificato, e quindi ha https, occorre gestire la proprietà per i certificati.
Con la seguente riga di codice, è possibile effettuare il download anche dei file situati su siti con protetti con certificati e quindi di tipo htttps.

System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

Qui di seguito si riporta il codice completo dell’evento click del pulsante per il download.

C#

private void BtnDownload_Click(object sender, EventArgs e)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create("https://www.sito.it/file.pdf");
httpRequest.Method = WebRequestMethods.Http.Get;
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream ResponseStream = httpResponse.GetResponseStream();

using (Stream stream = httpResponse.GetResponseStream())
{
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
byte[] arrayByte = ms.ToArray();
File.WriteAllBytes("C:\\Varie\\test.pdf", arrayByte);

}
MessageBox.Show("Download completato.");
}

Conclusioni

L’articolo ha fornito al lettore le informazioni di base per dotare le proprie applicazioni di tipo Windows Application o web application per il download dei file.
Sulla gestione web, si possono realizzare interessanti programmi.
Le classi fornite dal Framework versione 5 o versione precedente, permettono di scrivere codice e funzionalità anche complesse in maniera semplice, riducendo al programmatore i tempi di realizzo.