public static string CheckUrl(IDownloader downloader)
{
string fileName = string.Empty;
// Check the file information on the remote server.
var webRequest = InitializeHttpWebRequest(downloader);
using (var response = webRequest.GetResponse())
{
foreach (var header in response.Headers.AllKeys)
{
if (header.Equals("Accept-Ranges", StringComparison.OrdinalIgnoreCase))
{
downloader.IsRangeSupported = true;
}
if (header.Equals("Content-Disposition", StringComparison.OrdinalIgnoreCase))
{
string contentDisposition = response.Headers[header];
string pattern = ".[^;]*;\\s+filename=\"(?<file>.*)\"";
Regex r = new Regex(pattern);
Match m = r.Match(contentDisposition);
if (m.Success)
{
fileName = m.Groups["file"].Value;
}
}
}
downloader.TotalSize = response.ContentLength;
if (downloader.TotalSize <= 0)
{
throw new ApplicationException(
"The file to download does not exist!");
}
if (!downloader.IsRangeSupported)
{
downloader.StartPoint = 0;
downloader.EndPoint = int.MaxValue;
}
}
if (downloader.IsRangeSupported &&
(downloader.StartPoint != 0 || downloader.EndPoint != long.MaxValue))
{
webRequest = InitializeHttpWebRequest(downloader);
if (downloader.EndPoint != int.MaxValue)
{
webRequest.AddRange(downloader.StartPoint, downloader.EndPoint);
}
else
{
webRequest.AddRange(downloader.StartPoint);
}
using (var response = webRequest.GetResponse())
{
downloader.TotalSize = response.ContentLength;
}
}
return fileName;
}