时间:2014-01-29 来源:

Asp.net中断点续传的原理与实现方法分享

请求协议是由客户机 (浏览器)向服务器(WEB SERVER)提交请求时发送报文的协议.回复协议是由服务器(web server), 24 Jun 2003 05:39:40 GMT
Content-Type: image/jpeg
Accept-Ranges: bytes
Last-Modified: Thu, 23 May 2002 03:05:40 GMT
ETag: "bec48eb862c21:934"
Content-Length: 2827
….

  顾名思义,团队网页接活断点续传就是在上一次下载时断开的位置开始继续下载.在HTTP协议中,手机网页制作可以在请求报文头中加入Range段网页切图制作,来表示客户机希望从何处继续下载.
  比如说从第1024字节开始下载,网页切图制作请求报文如下:
复制代码 代码如下:


GET /image/index_r4_c1.jpg HTTP/1.1
Accept: */*
Referer: http://192.168.3.120:8080
Accept-Language: zh-cn
Accept-Encoding: gzip, 24 Jun 2003 05:39:40 GMT
Content-Type: image/jpeg
Accept-Ranges: bytes
Last-Modified: Thu, 23 May 2002 03:05:40 GMT
ETag: "bec48eb862c21:934"
Content-Length: 1803
Content-Range: bytes 1024-1803/2827

通过两段不同的报文可以看到,承接网站前端在断点续传时psd切图html,我们只要能给客户端相应相应的报文,psd切图html使客户端能正确响应web外包,并且传送续传点后的部分文件即可实现断点续传.
1. 区分断点续传报文.
由于断点续传报文中含有Range字段,div切图排版因此网页切图制作,只要通过Request.Headers["Range"]是否为null即可.
2. 发送正确的续传响应报文
两次响应报文不同的部分在报文中已经用红色部分标识出来,网页切图制作只需修改红色部分报文头div+css+js切图,便能发送正确的续传报文.
3. 传送正确的文件部分
续传的时候只需要传送续传点之后的文件即可,div+css+js切图首先通过请求报文中的Range字段获取文件的开始位置承接网站前端, System.EventArgs e)
{
string file = MapPath("ff.zip");
FileInfo fi=new FileInfo (file);

long startPos = 0;

//所传输的文件长度
long fileTranLen = fi.Length;

//断点续传请求
if (Request.Headers["Range"] != null)
{
Response.StatusCode = 206;
startPos = long.Parse(Request.Headers["Range"].Replace("bytes=", "bytes");
//Content-Range: bytes [文件块的开始字节]-[传输文件的总大小]/[文件的总大小]
Response.AddHeader("Content-Range",startPos,fi.Length));
}

Response.AddHeader("Content-Length", "attachment; filename=" + fi.Name);

//简单的流拷贝
System.IO.Stream fileStream = System.IO.File.OpenRead(file);
fileStream.Position = startPos;

byte[] buffer = new Byte[1024];
int count;
while ((count = fileStream.Read(buffer, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, count);
}
fileStream.Close();

Response.End();
}
点击次数:2752
作者:

其它web前端开发资讯

【GitHub-SwipeMenuListView】针对ListViewitem的侧滑菜单【互联网】2017年12月25日VR在江西2017年12月25日poj2965ThePilotsBrothers'refrigerator 【编程语言】2017年12月25日View的getWidthgetHeight与getMeasuredWidthgetMeasuredHeight的区别【编程语言】2017年12月25日RedHatLinux安装JDK、Maven、Jboss 【移动开发】2017年12月25日小米首日量产火热预定已超10万2017年12月25日算法与数据结构基础5:C++栈的简单实现 【综合】2017年12月25日mount:wrongfstype【移动开发】2017年12月25日《Cocos2d-x实战JS卷Cocos2d-JS开发》上线了 【移动开发】2017年12月25日谷歌销售收益锐减动力不足现疲态2017年12月25日Oracle中LONGRAWBLOBCLOB类型介绍【综合】2017年12月25日JSP页面ApacheFileUpload组件上传文件的同时,传递其他参数的方法 【编程语言】2017年12月25日金山卫士2.4发布新增ARP防火墙2017年12月25日POJ1228Grandpa'sEstate(稳定凸包) 【编程语言】2017年12月25日360随身WiFiU盘版全球首发10万台8分钟售罄2017年12月25日瑞银:Sun营收下滑65亿美元报价过高2017年12月25日
web前端行业资讯
Web new NewsList
谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日继“Angel”开源后,腾讯又开放TDinsight机器学习平台 ,,2017年12月21日谷歌母公司研发“闪光”网络技术无需铺设线缆 ,,2017年12月21日微软投资5千万美元利用人工智能对抗气候变化 ,,2017年12月21日谷歌中国2017:面向开发者的1年AI先行的1年 ,,2017年12月21日GreenKey加入Symphony软件基金会,将开源语音软件 ,,2017年12月21日腾讯发现者揭秘:怎么应对TensorFlow的安全风险,修复有多难 ,,2017年12月21日清华新成立两大交叉研究机构探索智能与未来 ,,2017年12月21日微软将AI融入生产力工具和搜索引擎与其它巨头竞争 ,,2017年12月21日Gfycat将利用机器学习技术创建高分辨率GIF动图 ,,2017年12月21日安全软件公司Avast开源化机器码反编译器RetDec ,,2017年12月21日谷歌开源TFGAN,让训练和评估GAN变得更加简单 ,,2017年12月21日社区对模块化不感兴趣时隔三周经典版FedoraServer27发布 ,,2017年12月21日Windows10加入OpenSSH客户端 ,,2017年12月21日FirefoxQuantum发布一个月安装量1.7亿 ,,2017年12月21日吴恩达宣布创业新项目已与富士康达成战略合作 ,,2017年12月21日Scala入门系列(十二):隐式转换2017年12月20日speedment入门教程2017年12月20日SLAM入门笔记(1):特征点的匹配2017年12月20日深入浅出了解frame和bounds2017年12月20日solrsolrj之原子更新 【互联网】2015年06月29日安卓动画为了,写购物车动画,搜集的安卓动画的代码 【云计算】2015年04月13日Flash程序如何测试2014年01月28日android学习二十三(解析json格式数据) 【移动开发】2015年01月09日Debian安全更新时缺少验证公钥的问题【编程语言】2014年11月04日codeforces550CDivisibilitybyEight(数学题)【编程语言】2015年06月11日Java-Oracle-Excel随机生成测试数据 【Web前端】2015年05月28日unity中事件分发系统EventDispatcher 【移动开发】2015年03月24日P2P需展现其更适宜平民化理财的属性【数据库】2014年12月01日微软终于想通把Script56文档更新版下载2014年01月29日田忌赛马【编程语言】2014年11月06日KVC(2) 【移动开发】2015年07月01日Servlet流操作——在浏览器中打开或者下载PDF文件 【移动开发】2015年06月17日有趣的script标签用getAttribute方法来自脚本吧2014年01月29日HDU1116PlayonWords【欧拉图】+【并查集】 【架构设计】2014年11月26日有关Javascript中数组的push方法【综合】2015年04月13日CMD下的网络安全配置命令2014年01月30日【LeetCode90】 SubsetsII 【编程语言】2015年03月30日arm平台编译动态库报relocationR_ARM_MOVW_ABS_NC错误解决 【云计算】2014年11月24日ios应用内支付(In-AppPurchase,沙盒测试,后台验证) 【互联网】2015年04月17日Android设备挂载的所有存储器手机存储,sd卡 【编程语言】2015年05月11日MySQL高可用MMM安装部署以及故障转移详细资料汇总【移动开发】2015年04月24日Google收购Android十周年全面解读Android现状 【架构设计】2015年08月14日安卓从字符串中删除指定的子串【编程语言】2015年07月30日文章内容页广告浮于左上角的解决办法2014年01月29日【机器学习基础】梯度提升决策树 【综合】2015年07月27日计算机战争背后的死亡商人揭秘:漏洞高价出售 ,,2016年06月23日HibernateCore4.0Final发布 ,,2016年06月23日Android启动浏览器的方法 【编程语言】2015年01月20日linuxVPS主机上备份网站和数据库的方法2014年01月30日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)