예제 #1
0
        public RemoteFileDetail GetFileInfo(ResourceDetail rl)
        {
            FtpWebRequest    request;
            RemoteFileDetail result = new RemoteFileDetail();

            result.AcceptRanges = true;



            request = (FtpWebRequest)GetRequest(rl);

            request.UsePassive = true;
            request.Timeout    = 500000;
            request.Method     = WebRequestMethods.Ftp.GetFileSize;
            FillCredentials(request, rl);

            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            {
                result.FileSize = response.ContentLength;
            }

            request        = (FtpWebRequest)GetRequest(rl);
            request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
            FillCredentials(request, rl);

            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            {
                result.LastModified = response.LastModified;
            }

            return(result);
        }
        public ResponseBase <RemoteFileDetail> GetFileInfo(ResourceDetail rl)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)GetRequest(rl);
                //request.Timeout = 100000;

                HttpWebResponse  response = (HttpWebResponse)request.GetResponse();
                RemoteFileDetail result   = new RemoteFileDetail
                {
                    MimeType     = response.ContentType,
                    LastModified = response.LastModified,
                    FileSize     = response.ContentLength,
                    AcceptRanges = Compare(response.Headers["Accept-Ranges"], "bytes", StringComparison.OrdinalIgnoreCase) == 0
                };
                return(new ResponseBase <RemoteFileDetail>()
                {
                    Denied = false, ReturnedValue = result
                });
            }
            catch (Exception ex)
            {
                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                }
                Serilog.Log.Error(ex, "---Could not get remote file information trial number");
                var responseFailed = new ResponseBase <RemoteFileDetail>()
                {
                    Denied = true
                };
                responseFailed.AddMessage(ex.Message);
                return(responseFailed);
            }
        }
예제 #3
0
        public CalculatedSegment[] GetSegments(int segmentCount, RemoteFileDetail remoteFileInfo)
        {
            long minSize     = 200000;
            long segmentSize = remoteFileInfo.FileSize / segmentCount;

            while (segmentCount > 1 && segmentSize < minSize)
            {
                segmentCount--;
                segmentSize = remoteFileInfo.FileSize / segmentCount;
            }

            long startPosition = 0;

            List <CalculatedSegment> segments = new List <CalculatedSegment>();

            for (int i = 0; i < segmentCount; i++)
            {
                if (segmentCount - 1 == i)
                {
                    segments.Add(new CalculatedSegment(startPosition, remoteFileInfo.FileSize));
                }
                else
                {
                    segments.Add(new CalculatedSegment(startPosition, startPosition + (int)segmentSize));
                }

                startPosition = segments[segments.Count - 1].EndPosition;
            }

            return(segments.ToArray());
        }
예제 #4
0
        public ResponseBase <RemoteFileDetail> GetFileInfo(ResourceDetail rl)
        {
            try {
                FtpWebRequest    request;
                RemoteFileDetail result = new RemoteFileDetail();
                result.AcceptRanges = true;



                request = (FtpWebRequest)GetRequest(rl);

                request.UsePassive = true;
                //request.Timeout = 500000;
                request.Method = WebRequestMethods.Ftp.GetFileSize;
                FillCredentials(request, rl);

                using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                {
                    result.FileSize = response.ContentLength;
                }

                request        = (FtpWebRequest)GetRequest(rl);
                request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
                FillCredentials(request, rl);

                using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                {
                    result.LastModified = response.LastModified;
                }

                return(new ResponseBase <RemoteFileDetail>()
                {
                    Denied = false, ReturnedValue = result
                });
            }
            catch (Exception ex)
            {
                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                }
                var responseFailed = new ResponseBase <RemoteFileDetail>()
                {
                    Denied = true
                };
                responseFailed.Messages.Add(ex.Message);
                return(responseFailed);
            }
        }
예제 #5
0
        public ResponseBase <List <Segment> > GetSegments(int segmentCount, long minSizeSegment,
                                                          RemoteFileDetail remoteFileInfo, string fileName)
        {
            long minSize     = 200000;
            long segmentSize = remoteFileInfo.FileSize / segmentCount;

            while (segmentCount > 1 && segmentSize < minSizeSegment)
            {
                segmentCount--;
                segmentSize = remoteFileInfo.FileSize / segmentCount;
            }

            long startPosition = 0;
            List <CalculatedSegment> calculatedSegments = new List <CalculatedSegment>();

            for (var i = 0; i < segmentCount; i++)
            {
                calculatedSegments.Add(segmentCount - 1 == i
                    ? new CalculatedSegment(startPosition, remoteFileInfo.FileSize)
                    : new CalculatedSegment(startPosition, startPosition + (int)segmentSize));

                startPosition = calculatedSegments[calculatedSegments.Count - 1].EndPosition;
            }

            var segments = new List <Segment>();

            for (var i = 0; i < calculatedSegments.Count; i++)
            {
                Segment segment = new Segment
                {
                    Index = i,
                    InitialStartPosition = calculatedSegments[i].StartPosition,
                    StartPosition        = calculatedSegments[i].StartPosition,
                    EndPosition          = calculatedSegments[i].EndPosition,
                    CurrentURL           = fileName,
                    CurrentTry           = 0
                };
                segments.Add(segment);
            }

            return(new ResponseBase <List <Segment> >()
            {
                Denied = false,
                ReturnedValue = segments
            });
        }
예제 #6
0
        public virtual RemoteFileDetail GetFileInfo(ResourceDetail rl)
        {
            HttpWebRequest request = (HttpWebRequest)GetRequest(rl);

            request.Timeout = 100000;
            FillCredentials(request, rl);

            HttpWebResponse  response = (HttpWebResponse)request.GetResponse();
            RemoteFileDetail result   = new RemoteFileDetail
            {
                MimeType     = response.ContentType,
                LastModified = response.LastModified,
                FileSize     = response.ContentLength,
                AcceptRanges =
                    Compare(response.Headers["Accept-Ranges"], "bytes", StringComparison.OrdinalIgnoreCase) == 0
            };


            return(result);
        }