コード例 #1
0
 protected void Application_Error(object sender, EventArgs e)
 {
     Error.ErrorLog err1 = new Error.ErrorLog(new Exception("TEST in Global.asax"), HttpContext.Current.Request);// new HttpRequest("", "", ""));
 }
コード例 #2
0
ファイル: Global.asax.cs プロジェクト: ralico/DownloadServer
 protected void Application_Error(object sender, EventArgs e)
 {
     Error.ErrorLog err1 = new Error.ErrorLog(new Exception("TEST in Global.asax"), HttpContext.Current.Request);// new HttpRequest("", "", ""));
 }
コード例 #3
0
        public void ProcessRequest(HttpContext context)
        {
            DownloadCount dc = new DownloadCount();
            const long packSize = 20000;// 65536;
            string fileName = context.Request.Url.Segments[context.Request.Url.Segments.Length - 1];
            FileStream file;
            long offset = 0;
            long rangeBegin = 0;
            long rangeEnd = 0;
            long dataTransfered = 0;
            long fileSize = 0;

            if (context.Session != null)
            {
                try
                {
                    context.Session.Add("ID", context.Session.SessionID);
                }
                catch (Exception)
                {
                    context.Session.Add("ID", dc.Count().ToString());
                }
            }

            if (File.Exists(Configuration.FilesPath + fileName))
            {
                context.Response.Clear();

                file = new FileStream(Configuration.FilesPath + fileName, FileMode.Open, FileAccess.Read);

                fileSize = file.Length;
                rangeBegin = 0;
                rangeEnd = file.Length;

                CalculateRange(context.Request, file.Length, ref rangeBegin, ref rangeEnd);

                //If isn't range
                if (rangeBegin == 0 && (rangeEnd == file.Length))
                {
                    context.Response.StatusCode = 200;
                }
                else
                {
                    context.Response.AppendHeader("Content-Range", "bytes " + rangeBegin + "-" + rangeEnd + "/" + file.Length.ToString());
                    context.Response.StatusCode = 206;
                }

                context.Response.AppendHeader("Content-Length", file.Length.ToString());
                context.Response.AppendHeader("Last-Modified", File.GetLastAccessTimeUtc(Configuration.FilesPath + fileName).ToString());
                context.Response.AppendHeader("Accept-Ranges", "bytes");
                context.Response.AppendHeader("ETag", "id_test");
                context.Response.ContentType = "application/octet-stream";

                if (!context.Request.HttpMethod.Equals("HEAD"))
                {
                    context.Response.Flush();

                    offset = rangeBegin;
                    int readCount;
                    byte[] buffer = new Byte[packSize];
                    file.Seek(offset, SeekOrigin.Begin);
                    while (context.Response.IsClientConnected && offset < rangeEnd)
                    {
                        readCount = file.Read(buffer, 0, (int)Math.Min(rangeEnd - rangeBegin, buffer.Length));

                        context.Response.OutputStream.Write(buffer, 0, readCount);
                        context.Response.Flush();

                        offset += readCount;
                        dataTransfered += readCount;
                    }
                }
                file.Dispose();
                file.Close();
            }
            else
            {
                Error.ErrorLog err = new Error.ErrorLog(new Exception("Filename = " + Configuration.FilesPath + fileName), context.Request);
                context.Response.StatusCode = 404;
            }

            dc.AddDownload(context, fileName, fileSize, dataTransfered, rangeBegin, rangeEnd);
            context.Response.End();
        }
コード例 #4
0
        public void ProcessRequest(HttpContext context)
        {
            DownloadCount dc       = new DownloadCount();
            const long    packSize = 20000;// 65536;
            string        fileName = context.Request.Url.Segments[context.Request.Url.Segments.Length - 1];
            FileStream    file;
            long          offset         = 0;
            long          rangeBegin     = 0;
            long          rangeEnd       = 0;
            long          dataTransfered = 0;
            long          fileSize       = 0;

            if (context.Session != null)
            {
                try
                {
                    context.Session.Add("ID", context.Session.SessionID);
                }
                catch (Exception)
                {
                    context.Session.Add("ID", dc.Count().ToString());
                }
            }

            if (File.Exists(Configuration.FilesPath + fileName))
            {
                context.Response.Clear();

                file = new FileStream(Configuration.FilesPath + fileName, FileMode.Open, FileAccess.Read);

                fileSize   = file.Length;
                rangeBegin = 0;
                rangeEnd   = file.Length;

                CalculateRange(context.Request, file.Length, ref rangeBegin, ref rangeEnd);

                //If isn't range
                if (rangeBegin == 0 && (rangeEnd == file.Length))
                {
                    context.Response.StatusCode = 200;
                }
                else
                {
                    context.Response.AppendHeader("Content-Range", "bytes " + rangeBegin + "-" + rangeEnd + "/" + file.Length.ToString());
                    context.Response.StatusCode = 206;
                }

                context.Response.AppendHeader("Content-Length", file.Length.ToString());
                context.Response.AppendHeader("Last-Modified", File.GetLastAccessTimeUtc(Configuration.FilesPath + fileName).ToString());
                context.Response.AppendHeader("Accept-Ranges", "bytes");
                context.Response.AppendHeader("ETag", "id_test");
                context.Response.ContentType = "application/octet-stream";

                if (!context.Request.HttpMethod.Equals("HEAD"))
                {
                    context.Response.Flush();

                    offset = rangeBegin;
                    int    readCount;
                    byte[] buffer = new Byte[packSize];
                    file.Seek(offset, SeekOrigin.Begin);
                    while (context.Response.IsClientConnected && offset < rangeEnd)
                    {
                        readCount = file.Read(buffer, 0, (int)Math.Min(rangeEnd - rangeBegin, buffer.Length));

                        context.Response.OutputStream.Write(buffer, 0, readCount);
                        context.Response.Flush();

                        offset         += readCount;
                        dataTransfered += readCount;
                    }
                }
                file.Dispose();
                file.Close();
            }
            else
            {
                Error.ErrorLog err = new Error.ErrorLog(new Exception("Filename = " + Configuration.FilesPath + fileName), context.Request);
                context.Response.StatusCode = 404;
            }

            dc.AddDownload(context, fileName, fileSize, dataTransfered, rangeBegin, rangeEnd);
            context.Response.End();
        }
コード例 #5
0
ファイル: Oops.aspx.cs プロジェクト: ralico/DownloadServer
 protected void Page_Load(object sender, EventArgs e)
 {
     ErrorLog err = new ErrorLog(Server.GetLastError(), Request);
     lblMessage.Text = err.GetErrorMessage();
 }