当前位置: 首页 > 编程日记 > 正文

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

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


本解决方案所参考的资料链接列表(在此对作者表示感谢):
http://blog.csdn.net/playyuer/archive/2004/08/02/58430.aspx
http://www.httpsniffer.com/http/1416.htm
http://support.microsoft.com/default.aspx?scid=kb;en-us;812406&Product=aspnet

相关文章:

0.7秒完成动漫线稿上色,爱奇艺发布AI上色引擎

出品 | AI科技大本营(ID:rgznai100)中国漫画的需求量在不断增加,而动漫制作成本一直居高不下。究其原因为动漫制作是一个复杂且耗时的过程,需要大量工作人员在不同阶段进行协作。动漫制作过程中,需先创作关键帧草图&am…

Java Web整合开发读书笔记

下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 下载Eclipse: http://www.eclipse.org/downloads/ 下载Tomcat: http://tomcat.apache.org/download-70.cgi 正则表达式:http://www.cnblogs.com/deerchao…

ListView中CheckBox使用问题

因为CheckBox的点击事件优先级比ListView的高,所以当ListView中使用CheckBox会导致ListView的setOnItemClickListener失去响应。 解决的方法:在CheckBox中加入android:focusable"false"。使得CheckBox初始的时候没有获取焦点。 假设想在单击C…

网页播放的视频代码

网页播放的视频代码 第一种是通过调用window media player进行播放诸如&#xff1a;wmv,asf等格式文件: <object alignmiddle classOBJECT classidCLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 height320 idMediaPlayer width356> <param name"ShowStatusBar…

[Ruby] 模块

1. 命名空间模块定义了一个命名空间&#xff0c;方法和常量可以在其中任意使用而不必担心被其他方法或常量干扰&#xff0c;例如&#xff1a;module Testdef Test.method()end end模块常量的命名和类常量一样&#xff0c;都以大写字母开头&#xff0c;方法定义类似于类方法的定…

10个工程师,9个不合格!

如果你想问最近这些年什么编程语言最值得学习&#xff0c;我会毫不犹豫的告诉你是Python。无论是刚入门的程序员&#xff0c;还是年薪BATJ的技术大牛&#xff0c;都无可否认现在Python对于一个程序员职业发展的重要性。所以不仅是开发小白&#xff0c;甚至很多开发老手&#xf…

云计算(2)it 是什么

2015年&#xff0c;全世界在it上面的花费达到3亿8千亿美金之多。 云数据中心&#xff1a;核心基础架构&#xff0c;云计算的物理载体&#xff0c;提供数据处理、存储和高性能计算支撑&#xff0c;包括服务器、存储、冷却、机房空间和能耗管理等。 超大规模的云数据中心&#xf…

大批量生成假数据,faker.js获得近28k个Star

整理 | 夕颜图源 | 视觉中国来源 | CSDN&#xff08;ID:CSDNnews&#xff09;近日&#xff0c;GitHub上一个生成假数据的项目faker.js火了&#xff0c;攀升Trendinging榜单第二&#xff0c;标星目前已超过27.1k。只需要简单几步操作&#xff0c;就可以在浏览器和node.js中生成大…

C++代理类,句柄(智能指针)_C++沉思录笔记

代理类 首先定义三个类: class Animal{ public:virtual void getName()0;virtual void clone()0; };class Cat:public Animal{ public:void getName(){cout<<"this is Cat"<<endl;}Animal* clone(){return new Cat;} };class Dog:public Animal{ public:…

浅析C语言的一个关键字——register

1、register修饰符暗示编译程序相应的变量将被频繁地使用&#xff0c;如果可能的话&#xff0c;应将其保存在CPU的寄存器中&#xff0c;以加快其存储速度。例如下面的内存块拷贝代码&#xff0c; /* Procedure for the assignment of structures, */ /* if the C compiler doe…

《Haskell趣学指南》—— 第1章,第1.2节小朋友的第一个函数

本节书摘来自异步社区《Haskell趣学指南》一书中的第1章&#xff0c;第1.2节小朋友的第一个函数&#xff0c;作者 【斯洛文尼亚】Miran Lipovaca&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.2 小朋友的第一个函数函数的声明与它的调用形式大体相同&…

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页

关键字&#xff1a;DataGrid、存储过程、分页出自&#xff1a; http://blog.csdn.net/yzx110/archive/2004/08/18/78525.aspx摘要&#xff1a;在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下…

看清头秃元凶,腾讯AI首度揭示真相

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;11月17日&#xff0c;腾讯公布了一项人工智能助力药物发现的新进展。通过腾讯自研的提升蛋白质结构预测精度的新方法&#xff0c;联合研究团队首次解析了II型5a还原酶&#xff08;SRD5A2&#xff09;的三维结构&#x…

UNIX--stat、fstat和lstat函数

2019独角兽企业重金招聘Python工程师标准>>> stat、fstat和lstat函数(UNIX) #include #include int stat(const char *restrict pathname, struct stat *restrict buf); 供给文件姓名&#xff0c;获取文件对应特点。感受通常是文件没有翻开的时分这样操作。 int fst…

UVA 1482 - Playing With Stones(SG打表规律)

UVA 1482 - Playing With Stones 题目链接 题意&#xff1a;给定n堆石头&#xff0c;每次选一堆取至少一个。不超过一半的石子&#xff0c;最后不能取的输&#xff0c;问是否先手必胜 思路&#xff1a;数值非常大。无法直接递推sg函数。打出前30项的sg函数找规律 代码&#xff…

Google和网易有道合作开课了

11月16日&#xff0c;2020年Google开发者大会正式开幕。受疫情影响&#xff0c;本次大会首次以线上形式举办&#xff0c;这也是Google首次以全线上形式与中国开发者相聚。本届大会主题聚焦“代码不止”&#xff0c;其中“学习”成为本次大会重要板块之一。在该主题下&#xff0…

Node.js v0.10版本发布

Node.js研发团队发布了node.js v0.10版本&#xff0c;它是个基于Javascript、用于构建高性能异步服务器的平台。该版本主要更新如下&#xff1a;更易于使用的数据流处理模块&#xff0c;通过域更好地处理错误&#xff0c;此外还带来了性能方面的提升。该团队还宣布在v0.10之后、…

动手扩充FreeTextBox的功能

作者&#xff1a;朱俊代码&#xff1a;C#关键字&#xff1a;FreeTextBox、流媒体出自&#xff1a;http://blog.csdn.net/foxmail/archive/2004/08/21/81096.aspx摘要&#xff1a;最近一个项目要求可以在发表文章的时候能发布电影&#xff0c;当然不可能叫用户去写HTML代码了&am…

《防患未然:实施情报先导的信息安全方法与实践》——3.3 攻击剖析

本节书摘来自华章计算机《防患未然&#xff1a;实施情报先导的信息安全方法与实践》一书中的第3章&#xff0c;第3.3节,作者&#xff1a;[美] 艾伦利斯卡&#xff08;Allan Liska&#xff09; 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 3.3 攻击剖析 为了开发更…

c#.net常用函数和方法集

1、DateTime 数字型 System.DateTime currentTime new System.DateTime(); 1.1 取当前年月日时分秒 currentTimeSystem.DateTime.Now; 1.2 取当前年 int 年currentTime.Year; 1.3 取当前月 int 月currentTime.Month; 1.4 取当前日 int 日currentTime.Day; 1.5 取当…

员工培训:如何制定以数据为依据的业务决策

作者 | Kamy Anderson翻译| Katie&#xff0c;责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国普华永道的研究表明&#xff0c;高度数据驱动的组织在决策方面取得显着改善的可能性要高三倍。不幸的是&#xff0c;高达62&#xff05;的高管仍然更多地依赖经验和直觉…

IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc

阅读目录: 一. 一个没有使用IoC的例子 二. 当需求发生变动时&#xff0c;非IoC遭遇到的困境 三. 使用IoC彻底解决问题 四. 总结 一、一个没有使用IoC的例子 IoC的全称是Inversion of Control&#xff0c;中文叫控制反转。要理解控制反转&#xff0c;可以看看非控制反转的一个例…

【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!

喜讯喜讯&#xff01;为了酬谢广大学员。CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课&#xff0c;让您度过一个充实的暑假~ 參与本次公开课&#xff0c;即有机会获得50C币&#xff01; 答疑公开课时间&#xff1a;7月18日 晚7:30-9:30 答疑主题&#xff1a;姜雪伟3D…

Linux0.11内核引导启动过程概述

Linux0.11仅支持x86架构。它的内核引导启动程序在文件夹boot内&#xff0c;共有三个汇编代码文件。按照启动流程依次是&#xff1a; &#xff08;1&#xff09;bootsect.s。boot是启动引导的意思&#xff0c;sect即sector&#xff0c;是扇区的意思&#xff0c;二者合在一起启动…

用Python分析5000+抖音大V,粉丝最喜欢的视频类型是它

作者 | 小F来源 | 法纳斯特头图 | CSDN下载自视觉中国最近&#xff0c;小F在知乎上看到一个关于抖音的问题。里面提到了&#xff0c;目前我国人均每天刷短视频110分钟。看这数据&#xff0c;看来小F又被平均了。不过老实说&#xff0c;只要一打开抖音&#xff0c;小F确实是有一…

JSTL 读取数组 和 字符串连接

2019独角兽企业重金招聘Python工程师标准>>> JSTL读取数组&#xff1a; 从后台取得一个字符串&#xff0c;如&#xff1a;AA-50-3&#xff0c;通过-划分成字符串数组。然后读取每个字符串。 <c:set var"cle" value"${fn:split(AA-50-3,-)}"…

《Photoshop Lab修色圣典(修订版)》—第1课1.7节言归正传

本节书摘来自异步社区《Photoshop Lab修色圣典(修订版)》一书中的第1课1.7节言归正传&#xff0c;作者【美】Dan Margulis,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.7 言归正传Photoshop Lab修色圣典(修订版)上面的讨论说明&#xff0c;与其他方法相比&#x…

PHP获取当前时间差8小时的问题

<?php echo date("Y-m-d H:i:s"); //当前时间 ?> 这个方法获取的时间和标准时间差8小时&#xff1b;从php5.1.0开始&#xff0c;php.ini里加入了date.timezone这个选项&#xff0c;默认情况下是关闭的也就是显示的时间&#xff08;无论用什么php命令…

四连通,和八连通的详解(MATLAB)

转至&#xff1a;http://www.cnblogs.com/xiaojidan/archive/2012/08/20/2647261.html 功能&#xff1a;标注二进制图像中已连接的部分。语法&#xff1a;L bwlabel(BW,n) [L,num] bwlabel(BW,n) 其中BW为输入图像;N可取值为4或8表示连接四连通或八连通区域;NUM为找到的连通…

梅花桩上练真功,腾讯公布机器人移动技术探索新突破

出品 | AI科技大本营11月20日&#xff0c;腾讯公布了其在移动机器人研究方面的新进展&#xff1a;四足移动机器人 Jamoca 和自平衡轮式移动机器人首次对外亮相。Jamoca 是国内首个能完成走梅花桩复杂挑战的四足机器人&#xff0c;自平衡轮式移动机器人的相关研究成果还入选了机…