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

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

时间: 2025-01-26 12:22:43

Asp.net(c#)实现多线程断点续传的相关文章

点对点多线程断点续传的实现

本文配套源码 在如今的网络应用中,文件的传送是重要的功能之一,也是共享的基础.一些重要的协议像HTTP, FTP等都支持文件的传送.尤其是FTP,它的全称就是"文件传送协议",当初的工程师设计 这一协议就是为了解决网络间的文件传送问题,而且以其稳定,高速,简单而一直保持着很大的生命力 .作为一个程序员,使用这些现有的协议传送文件相当简单,不过,它们只适用于服务器模式中.这样 ,当我们想在点与点之间传送文件就不适用了或相当麻烦,有一种大刀小用的意味.笔者一直想寻求一 种简单有效,且具备多

HTTP多线程断点续传下载的尝试

直接看代码吧,废话一点不多说. 功能介绍: 1 多线程HTTP下载 2 支持断点续传 3 临时文件下载,成功后改名 4 提供防盗链的破解 Java代码 1.import java.io.BufferedInputStream; 2.import java.io.BufferedWriter; 3.import java.io.File; 4.import java.io.OutputStreamWriter; 5.import java.io.RandomAccessFile; 6.import

AsyncTask实现多任务多线程断点续传下载

这篇博客是AsyncTask下载系列的最后一篇文章,前面写了关于断点续传的和多线程下载的博客,这篇是在前两篇的基础上面实现的,有兴趣的可以去看下. 一.AsyncTask实现断点续传 二.AsyncTask实现多线程断点续传 这里模拟应用市场app下载实现了一个Demo,因为只有一个界面,所以没有将下载放到Service中,而是直接在Activity中创建.在正式的项目中,下载都是放到Service中,然后通过BroadCast通知界面更新进度. 上代码之前,先看下demo的运行效果图吧.  

android 多线程断点续传下载 二

在上一节中,我们简单介绍了如何创建多任务下载,但那种还不能拿来实用,这一集我们重点通过代码为大家展示如何创建多线程断点续传下载,这在实际项目中很常用. main.xml: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&

android 多线程断点续传下载 三

今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基本要领,我们先一起简单回顾下它的基本原理. http://blog.csdn.net/shimiso/article/details/6763664  android 多线程断点续传下载 一 http://blog.csdn.net/shimiso/article/details/6763986 

android手机开发之网络多线程断点续传代码

本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多线程断点需要什么功能?难在哪里? 1.多线程下载, 2.支持断点.   使用多线程的好处:使用多线程下载会提升文件下载的速度.那么多线程下载文件的过程是:   (1)首先获得下载文件的长度,然后设置本地文件的长度.      HttpURLConnection.getContentLength();

android 多线程断点续传下载

http://blog.csdn.net/shimiso/article/details/6763986 多线程断点续传下载,这在实际项目中很常用. main.xml: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q

Android编程开发实现多线程断点续传下载器实例_Android

本文实例讲述了Android编程开发实现多线程断点续传下载器.分享给大家供大家参考,具体如下: 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线.电量不足等情况下,这就需要使用到断点续传功能,下次启动时从记录位置继续下载,可避免重复部分的下载.这里采用数据库来记录下载的进度. 效果图:   断点续传 1.断点续传需要在下载过程中记录每条线程的下载进度 2.每次下载开始之前先读取数据库

Android实现网络多线程断点续传下载实例_Android

我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多线程断点需要什么功能? 1.多线程下载, 2.支持断点. 使用多线程的好处:使用多线程下载会提升文件下载的速度.那么多线程下载文件的过程是: (1)首先获得下载文件的长度,然后设置本地文件的长度. HttpURLConnection.getContentLength();//获取下载文件的长度 RandomAccessFile file = new RandomAc