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

转载 2007年10月12日 15:09:00
 Asp.net(c#)实现多线程断点续传     CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html

以前一直错误的认为在ASP.NET中无法通过编程方式实现多线程断点续传,今天终于获得了这样一个解决方案,让我明白要学习的东西还很多
此解决方案基于其它解决方案及相关资料,根据我自己的理解改进.如有错漏,请尽管指出;如有其它更好的解决方案,请推荐一下,感谢先。

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, 010240);

                        
// 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();
            }

C#用HTTP协议实现多线程文件下载和断点续传

(1) 多线程文件下载的总体思路是:把一个下载任务分配给多个线程,首先获取文件的长度,平分给多个线程,每个线程负责指定的文件块,待全部线程完成后,再把各个线程下载的临时文件合并。...
  • q626779313
  • q626779313
  • 2014年05月18日 16:40
  • 2703

多线程下载文件和断点续传的简单实现

断点续传的要点: 每写入一次文件就将这次写入文件的位置保存起来(保存到文件中),下次读取文件的的位置开始下载public class MuchThreadDown { p...
  • wo_ha
  • wo_ha
  • 2016年07月24日 21:05
  • 2813

多线程断点续传实现

设计的几个要点:   1. 把每个下载文件切成若干个块(Block),然后得到一个位图,用来标记每个块的下载情况,并保存到文件里,用于实现断点续传。 2. HTTP Header里增...
  • NicolasYan
  • NicolasYan
  • 2016年03月10日 00:30
  • 648

C#高性能大容量SOCKET并发(九):断点续传

断点续传主要是用在上传或下载文件,一般做法是开始上传的时候,服务器返回上次已经上传的大小,如果上传完成,则返回-1;下载开始的时候,由客户端上报本地已经下载大小,服务器根据位置信息下发数据,因此上传下...
  • SQLDebug_Fan
  • SQLDebug_Fan
  • 2014年03月07日 16:28
  • 11046

多线程下载和断点续传和进度条

public class MainActivity extends Activity { protected final int DOWNLOAD_ERROR = 1; private fin...
  • lilengfan1991
  • lilengfan1991
  • 2015年07月02日 11:12
  • 252

C#技术分享【基于socket的断点续传功能】

最近开发了一个异地灾备传输工具,但由于网络不稳定,经常传输到一半就中断了,后来加入(断点续传)和(断线重连)功能很好的解决了该问题,特此跟大家分享经验。...
  • shi0090
  • shi0090
  • 2015年07月12日 23:55
  • 3542

关于“多线程断点续传下载”功能的一个简单实现和讲解

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992     上班第一天,在技术群里面和大家闲扯,无意中谈到了关于框架的使用,一个同学说为了用xUtils的断线...
  • wanglha
  • wanglha
  • 2015年03月13日 12:45
  • 934

Android之——多线程断点续传下载示例

在上一篇博文中,我们讲解了如何实现Android的多线程下载功能,通过将整个文件分成多个数据块,开启多个线程,让每个线程分别下载一个相应的数据块来实现多线程下载的功能。多线程下载中,可以将下载这个耗时...
  • l1028386804
  • l1028386804
  • 2015年07月15日 21:02
  • 2901

使用xUtils框架实现多线程下载和断点续传

在前面的博客中分别介绍了在Java中实现多线程下载和断点续传以及在android中实现多线程下载和断点续传,这篇博客将介绍使用第三方框架xUtils实现多线程下载和断点续传 首先看一下实现的效果,点...
  • u010105970
  • u010105970
  • 2016年04月23日 17:26
  • 2776

在ASP.NET MVC中实现大文件异步上传

在ASP.NET中通过HTTP上传大文件是一个由来已久的挑战,它是许多活跃的ASP.NET论坛最常讨论的问题之一,除了处理大文件外,用户还 经常被要求要显示出文件上传的进度,当你需要直接控制从浏览器上...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:21
  • 962
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Asp.net(c#)实现多线程断点续传
举报原因:
原因补充:

(最多只允许输入30个字)