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");