Contenuti

HttpClient: Come effettuare il download di una foto in async

HttpClient: Come effettuare il download di una foto in modalita’ async

In questi giorni mi sono trovato davanti alla necessita’ -internamente ad una Azure Functions- di copiare delle immagini da un sito sorgente e portarle in un nuovo sito destinazione. Se non avete mai fatto questo tipo di operazione l’idea potrebbe spaventarvi, ma sappiate che e’ davvero semplice.

Importante: Evitate di automatizzare il download di immagini, documenti o file di cui non avete il copyright e/o non siete proprietari.

ReadAsByteArrayAsync

Entriamo subito nel vivo del codice senza troppe parole. Il metodo DownloadPhoto viene chiamato all’interno della mia classe, per questo motivo e’ private. Se volete chiamarlo dall’esterno vi bastera’ solamente cambiarlo in public.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
private async Task<byte[]> DownloadPhoto(PhotoDTO photo)
{
    byte[] data = null;
    using (HttpClient client = new HttpClient())
    {
        using (var response = await client.GetAsync(photo.url))
        {
            data = await response.Content.ReadAsByteArrayAsync();
        }
    }
    return data;
}

Nelle righe precedenti vi ho copiato esattamente il blocco del mio codice sorgente scritto l’altra sera.

  • In ingresso viene fornita una istanza di PhotoDTO
  • Di essa utilizzero’ solamente la proprieta’ url
  • Sfruttando response.Content.ReadAsByteArrayAsync avro’ il suo contento in un array di byte