BiliRanking.Core.Download.DownloaderHelper.CheckUrl C# (CSharp) Method

CheckUrl() public static method

Check the URL to download, including whether it supports Range,
public static CheckUrl ( IDownloader downloader ) : string
downloader IDownloader
return string
        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;
        }

Usage Example

Exemplo n.º 1
0
 /// <summary>
 /// Check the Uri to find its size, and whether it supports "Pause".
 /// </summary>
 public void CheckUrl(out string fileName)
 {
     fileName = DownloaderHelper.CheckUrl(this);
 }