コード例 #1
0
ファイル: RemoteFileInfo.cs プロジェクト: lanicon/AltoHttp
 public static RemoteFileInfo Get(string url, EventHandler <BeforeSendingRequestEventArgs> before, EventHandler <AfterGettingResponseEventArgs> after)
 {
     using (var response = (HttpWebResponse)RequestHelper.CreateHttpRequest(url, before).GetResponse())
     {
         after.Raise(null, new AfterGettingResponseEventArgs(response));
         var headers = response.Headers;
         return(new RemoteFileInfo
         {
             AcceptRange = headers.AllKeys.Any(x => x.ToLower().Contains("range") && headers[x].Contains("bytes")),
             ServerFileName = FileNameHelper.GetFileName(response),
             URL = url,
             Length = response.ContentLength
         });
     }
 }
コード例 #2
0
ファイル: RemoteFileInfo.cs プロジェクト: ywscr/AltoHttp
        /// <summary>
        /// Gets the remote file informations from the server
        /// </summary>
        /// <param name="url">Remote file url</param>
        /// <param name="before">Event to be raised before sending request</param>
        /// <param name="after">Event to be raised after getting response</param>
        /// <returns></returns>
        public static RemoteFileInfo Get(string url, EventHandler <BeforeSendingRequestEventArgs> before, EventHandler <AfterGettingResponseEventArgs> after)
        {
            var request = (HttpWebRequest)RequestHelper.CreateHttpRequest(url, before);

            request.AddRange(0);
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                after.Raise(null, new AfterGettingResponseEventArgs(response));
                var headers = response.Headers;


                var serverFileName = FileNameHelper.GetFileName(response);

                var contentSize  = response.ContentLength;
                var contentRange = response.Headers[HttpResponseHeader.ContentRange];
                if (contentSize < 1 && !string.IsNullOrEmpty(contentRange))
                {
                    var parts = contentRange.Split('/');

                    if (parts.Length > 1)
                    {
                        long.TryParse(parts[1], out contentSize);
                    }
                }

                var transferEncodingHeader = response.Headers[HttpResponseHeader.TransferEncoding];
                var isChunked = false;
                if (transferEncodingHeader != null)
                {
                    isChunked = transferEncodingHeader.ToLower() == "chunked";
                }
                var acceptRanges = headers.AllKeys.Any(x => x.ToLower().Contains("range") && headers[x].Contains("bytes")) &&
                                   contentSize > 0;
                return(new RemoteFileInfo
                {
                    AcceptRange = acceptRanges,
                    ServerFileName = serverFileName,
                    URL = url,
                    Length = contentSize,
                    IsChunked = isChunked
                });
            }
        }