In .Net 4.0 I used WebClient to download files from an url and save them on my local drive. But I am not able to achieve the same in .Net Core.
Can anyone help me out on this?
In .Net 4.0 I used WebClient to download files from an url and save them on my local drive. But I am not able to achieve the same in .Net Core.
Can anyone help me out on this?
WebClient is not available in .NET Core. (UPDATE: It is from 2.0) The usage of HttpClient in the System.Net.Http is therefore mandatory:
using System.Net.Http;
using System.Threading.Tasks;
...
public static async Task<byte[]> DownloadFile(string url)
{
    using (var client = new HttpClient())
    {
        using (var result = await client.GetAsync(url))
        {
            if (result.IsSuccessStatusCode)
            {
                return await result.Content.ReadAsByteArrayAsync();
            }
        }
    }
    return null;
}
 
    
     
    
    WebClient is available from .net core 2.0 
var wc = new System.Net.WebClient();
wc.DownloadFile( URL, @"c:\temp\myfile.txt");
 
    
    In NetCore 6.0, you should use HttpClient instead of WebClient which is obsolete, and you have the async methods in the new File class.
The implementation is simple as the following:
static async Task DownloadFile(string url, string pathToSave, string fileName)
{
    var content = await GetUrlContent(url);
    if (content != null)
    {
        if (!Directory.Exists(pathToSave)) Directory.CreateDirectory(pathToSave);
        await File.WriteAllBytesAsync($"{pathToSave}/{fileName}", content);
    }
}
static async Task<byte[]?> GetUrlContent(string url)
{
    using (var client = new HttpClient())
    using (var result = await client.GetAsync(url))
        return result.IsSuccessStatusCode ? await result.Content.ReadAsByteArrayAsync():null;
}
Usage:
await DownloadFile("https://exampl.com/image.jpg", @"c:\DownloadedImages", "image.jpg");
