WEB开发网
开发学院WEB开发ASP.NET Asp.net(c#)实现多线程断点续传 阅读

Asp.net(c#)实现多线程断点续传

 2005-12-19 17:02:18 来源:WEB开发网   
核心提示:System.IO.Stream iStream = null; // Buffer to read 10K bytes in chunk: byte[] buffer = new Byte[10240]; // Length of the file: int length; // Total bytes t

System.IO.Stream iStream = null;

     // Buffer to read 10K bytes in chunk:
       byte[] buffer = new Byte[10240];

     // Length of the file:
       int length;

     // Total bytes to read:
       long dataToRead;

     // Identify the file to download including its path.
       string filepath  = @"E:\software\SQL Server 2000 Personal Edition.ISO";

     // Identify the file name.
       string  filename  = System.IO.Path.GetFileName(filepath);

     try
       {
         // Open the file.
         iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
           System.IO.Fileaccess.Read,System.IO.FileShare.Read);
         Response.Clear();

       // Total bytes to read:
         dataToRead = iStream.Length;

       long p = 0;
         if(Request.Headers["Range"]!=null)
         {
           Response.StatusCode = 206;
           p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
         }
         if(p != 0)
         {
           Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());          
         }
         Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());
         Response.ContentType = "application/octet-stream";
         Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));

       iStream.Position = p;
         dataToRead = dataToRead - p;
         // Read the bytes.
         while (dataToRead > 0)
         {
           // Verify that the client is connected.
           if (Response.IsClientConnected)
           {
             // Read the data in buffer.
             length = iStream.Read(buffer, 0, 10240);

           // Write the data to the current output stream.
             Response.OutputStream.Write(buffer, 0, length);

           // Flush the data to the HTML output.
             Response.Flush();

           buffer= new Byte[10240];
             dataToRead = dataToRead - length;
           }
           else
           {
             //PRevent infinite loop if user disconnects
             dataToRead = -1;
           }
         }
       }
       catch (Exception ex)
       {
         // Trap the error, if any.
         Response.Write("Error : " + ex.Message);
       }
       finally
       {
         if (iStream != null)
         {
           //Close the file.
           iStream.Close();
         }
          Response.End();
       }

Tags:Asp net 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接