断点上传原理
⑴ 如何让一个网站支持断点续传
其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为w www.sjtu.e.cn,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。
所以在客户端浏览器传给 Web服务器的时候要多加一条信息--从哪里开始。
下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔细看一下就会发现多了一行RANGE: bytes=2000070- 这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面服务器返回的信息比较一下,就会发现增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代码也改为206了,而不再是200了。
知道了以上原理,就可以进行断点续传的编程了。
⑵ 如何让服务器支持断点续传
其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为w ,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。
所以在客户端浏览器传给 Web服务器的时候要多加一条信息--从哪里开始。
下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔细看一下就会发现多了一行RANGE: bytes=2000070- 这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面服务器返回的信息比较一下,就会发现增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代码也改为206了,而不再是200了。
知道了以上原理,就可以进行断点续传的编程了。
⑶ ftp 命令可以断点续传吗
二、上传: 1、获取服务器上和本地要上传文件的同名文件大小; 2、向服务器发送“APPE + 文件名”,通知服务器,接下来从数据通道发送给你的数据要附加到这个文件末尾。 3、定位本地文件指针(和FTP上文件大小相同的位置) 4、从文件指针处读数据并发送。 好 了,FTP断点续传的原理就这么简单。代码里将断点上传和断点下载放到同一个函数(MoveFile)里,通过get参数说明是上传还是下载。当然,整个 FTP类的实现有800多行,包括登录、退出、获取FTP文件大小、删除FTP服务器上文件、响应服务器,解析响应信息等函数。相应的注释代码里都有,这 里就不一一熬述了。
这里重点说说PASV模式,即被动模式,这是FTP命令里比较不容易理解的一个,这条命令请求服务器在某个端口(非FTP默认端口或控制命令端口)创建一个监听socket,服务器创建的端口号会在客户端的控制命令通道上得到响应。得到这个端口号后,客户端就可以创建新的 socket(数据通道)
connect过去,并进行文件传输等工作。否则,如果为非被动模式,那么监听的socket由客户端创建,服务器connect过来。 对于这条命令的存在我是这么理解的,存在这么一种情况:客户端的IP是个内网的IP,服务器的IP是个外网的,当进行数据传输时内网的IP对于服务器是不可见的,只有由服务器启动监听socket才能建立数据通道,所以必须以被动模式进行。:)
⑷ 下载软件的断电续传是什么原理
断点续传的原理 其实断点续传的原理很简单其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:
假设服务器域名为wwww.sjtu.e.cn,文件名为down.zip。
GET /down.zip HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Connection: Keep-Alive
服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:
200
Content-Length=106786028
Accept-Ranges=bytes
Date=Mon, 30 Apr 2001 12:56:11 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给
Web服务器的时候要多加一条信息--从哪里开始。
下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。
GET /down.zip HTTP/1.0
User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
仔细看一下就会发现多了一行RANGE: bytes=2000070-
这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下:
206
Content-Length=106786028
Content-Range=bytes 2000070-106786027/106786028
Date=Mon, 30 Apr 2001 12:55:20 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT
和前面服务器返回的信息比较一下,就会发现增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代码也改为206了,而不再是200了。
⑸ 关于FTP断点续传原理 解释
由于FTP是顺序接收文件的,所以,只要计算已接收的数据大小,就可以知道断点在文件的偏移量,续传时,客户端将已接收的数据量传递给服务器,服务器使用这个做为偏移量继续读取文件,将剩余的数据发送至客户端,客户端仅需将接收到的数据追加至原文件尾部即可.
这样的一个过程即可实现断点续传.
另外有一些客户端为了闭免错误(因为掉线经常是由于错误引起的),会少发送实际接收的数据量,比如原1M的文件,已接收512KB,客户端可能会返回给服务器500KB,这样服务器就会从500KB处开始返回数据,客户端则从500KB处开始覆盖已有的12KB,以避免由于错误断开时造成的数据错误.好像说多了.
⑹ 如何实现基于http协议的断点续传的上传功能
于HTTP 协议的多线程下载和断点续传的实现 学 生:叶升路 指导教师:覃 颖 (三峡大学 电气信息学院) 摘 要:本文介绍了网络下载软件中的最新技术——多线程下载和断点续传技术,同时 也介绍了HTTP 协议的发展、特点以及WinSock 编程技术。最后在这些技术的基础上成 功设计并实现了基于HTTP 协议的具有多线程下载和断点续传功能的下载软件。本软件 的实现代码未使用任何WinInet API 函数如InternetOpen , InternetConnect 等,而是直接 使用WinSock 编程,逐步解析HTTP 协议来完成会话和文件下载等功能。经测试,下载 速度有所提高。 关键词:下载;多线程;断点续传;HTTP;WinSock; Abstract:This paper introces the latest downloading technology called multi-threaded downloading and resume in network downloading software. But also descripes the development of HTTP protocol, characteristics and WinSock programming. Finally, based on these technologies successfully designed and implemented a downloading tool based on the HTTP protocol with multi-threaded and resume features. The realization of the software code does not use any WinInet API functions such as InternetOpen, InternetConnect, etc., but directly use WinSock to programming, and complete the functions of conversation and file downloads and others by parse HTTP protocol steply. After tested, the speed of downloading has increased. Keywords: Downloading;Multi-thread;Resume;HTTP;WinSock; 前言 最近几年,随着计算机网络的飞速发展,因特网(Internet)已经逐渐成为人们生活、 工作、学习必不可缺的一部分。因特网上存储了大量丰富的信息资源,我们可以使用下载 工具,把需要的信息资源下载到本地。但是由于受到各种因素的限制,例如服务器性能、 网络带宽、下载的信息量以及下载工具等等,下载速度受到不同程度的影响。因此人们不 断地提高服务器性能,扩展网络带宽,开发效率更高的下载工具以达到最大化提高下载 速度的目的。 在限制下载速度的众多因素中,研究新的网络下载技术开发出更高效的下载工具无 疑是其中最节约,环保以及方便的方式。网络下载技术,也可以称为网络文件共享技术, 10 1 它一直是网络发展的重要推动力之一。早期人们共享资源的普遍方法是将资源文件上传 至服务器上,然后其他用户可以通过HTTP 或FTP 等协议将其下载到本地电脑。这种模 式称为客户机/服务器模式即C/S 模式,它对服务器的依赖性很大,当下载用户很少时, 比如说一个,他将独享服务器的带宽,很显然其下载速度会非常快。然而当下载的人数 较多而服务器带宽有限时,比如服务器带宽为3MB/S,而下载人数为100 人,则众多下 载用户不得不共享一个带宽(3MB/S)最终结果是下载速度均分(30KB/S),普遍不高。 P2P 技术的出现使得人们终于摆脱了服务器的枷锁。它的主要特点是资源分散、负 载均衡、和非中心化,它将共享的文件存储在各个客户机节点上,用户之间可以直接共 享和传输文件而不需要通过服务器。客户机不再只利用服务器带宽进行下载,它同时也 可以利用其他客户机节点的带宽,这样大大提高了下载速度。 纵观网络下载技术发展的历史,可以将其划分为四个阶段:单线程下载阶段、多线 程下载及断点续传阶段、P2P阶段、P2SP阶段。 一、单线下载时代:应对有限时间流量的办法 早在上个世纪90年代,当时互联网并不普及,很多人使用Modem拨号,通过Telnet 软件连接到拨接式BBS上获取资讯并与别人交流(收发邮件等),由于服务器的电话线 路数量有限,因此都会限制连接时间,一般新注册用户只有10分钟左右。这点时间用来 看帖回帖显然不够的,因此有人就开发了软件,进入BBS后,能够将整个BBS上所有内 容都下载回来,然后可以断线慢慢看慢慢回,最后再次拨入BBS上传回复。 二、断点续传与多线程下载时代:大幅度提高速度 进入Windows与WWW(World Wide Web,互联网)时代之后,IE,Netscape等浏览 器都可以通过点击左键下载,那个时候网络速度最快不过5KB/s,下载一首5MB的MP3 歌曲要15分钟以上!中途万一断线就前功尽弃,于是有人开发了支持断点续传的下载软 件。 世界上第一款支持断点续传的下载软件应该是GetRight。它可让你用浏览器下载文 件时有续传功能,可设定时间来下载文件或是中断Modem拨接,下载完毕时自动中断 Modem拨接或关机。 为了更好的利用带宽,在断点续传的基础上,多线程下载软件逐渐发展了起来。最 早出现的多线程下载软件是中国人开发的NetAnts(网络蚂蚁)。网络蚂蚁其实也是一 个断点续传软件,但它对断点续传功能进行了扩展:可进行多点续传,即利用断点续传 的原理同时建立多个连接下载同一个软件并最终将其合并为一个完整的软件。
⑺ 上传和下载文件的原理
《文件上传原理:Web上传文件的原理及实现》
下载了慢慢看吧:
www.crazycoder.cn/mypdf/1487.pdf
下载:掌握ftp传输协议就可以了。
HTTP:
GET ***
Content range: xxx-xxx
...
check for return code 200, 220, 3xx, 4xx, 5xx
FTP:
USER
PASS
SIZE
PORT
REST
RETR
QUIT
check for return codes of each command
多开几条连接,必要时还可以适当提高下载线程的优先级。断点续传对于HTTP一般是用Range字段实现、FTP一般用REST命令——当然,你的程序自身必须维护一个“已接收字节”之类的数据,用已提交这些请求。
去找些HTTP、FTP协议的资料,都有详细的讲解。
==========================================================
软件原理 。主要是用软件上传和下载的原理是怎样的?
这个很难用1,2句话说清楚,因为有IE下载,web下载,BT下载原理各不相同
你还是去看看相关的书吧
⑻ 如何实现断点续传
其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为w www.sjtu.e.cn,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT 所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web服务器的时候要多加一条信息--从哪里开始。 下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 仔细看一下就会发现多了一行RANGE: bytes=2000070- 这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。 服务器收到这个请求以后,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面服务器返回的信息比较一下,就会发现增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代码也改为206了,而不再是200了。 知道了以上原理,就可以进行断点续传的编程了。
⑼ 如何实现HTML5文件断点续传
实现HTML5文件断点续传
一、实现文件多选
HTML5的<input>新增了"multiple"属性,该属性可接受多个值的文件上传字段
<input type="file" multiple="multiple" name="file" id="file">
添加了该属性用户就可以在弹出的对话框中一次性选择多个文件了
二、实现文件从计算机拖拽到网页以及添加文件队列功能
这里我们用 dragover 和 drop 两个事件来管理文件拖拽的功能
其中 dragover 用来处理在指定的元素上移动时的事件,这里我们通过给body绑定dragover时间来处理页面中拖动文件的事件
document.body.addEventListener('dragover', dragFile, false);
function dragFile(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = '';
}
用 drop 事件来处理鼠标松开时候的事件,此时应该将用户拖动过来的文件加入到上传队列中,以供后续的处理
document.body.addEventListener('drop', dropFile, false);
function dragFile(evt) {
evt.stopPropagation();
evt.preventDefault();
// dataTransfer.files属性可以获取到所有拖动选择的文件,通过遍历可以读取到所有文件的信息。
// 遍历每个文件可以获取到文件的 name、size、type、lastModifiedDate等关键信息
var files = evt.dataTransfer.files;
// addfile 方法 用来添加上传文件队列,在input的change事件中也需要调用
// 该方法首先检查有无文件正在上传中,如果有就将后续加入的文件放到上传队列中,如果没有文件正在上传就直接执行上传命令
addfile(files);
}
三、文件续传原理
目前比较常用的断点续传的方法有两种,一种是通过websocket接口进行文件上传,另一种是通过ajax,两种方法各有千秋,虽然websocket听起来比较高端些~ 但是除了用了不同的协议外其他的算法基本上都是很相似的,并且服务端要开启ws接口,这里用相对方便的ajax来说明断点上传的思路。
说来说去,断点续传最核心的内容就是把文件“切片”然后再一片一片的传给服务器,但是这看似简单的上传过程却有着无数的坑。
首先是文件的识别,一个文件被分成了若干份之后如何告诉服务器你切了多少块,以及最终服务器应该如何把你上传上去的文件进行合并,这都是要考虑的。
因此在文件开始上传之前,我们和服务器要有一个“握手”的过程,告诉服务器文件信息,然后和服务器约定切片的大小,当和服务器达成共识之后就可以开始后续的文件传输了。
前台要把每一块的文件传给后台,成功之后前端和后端都要标识一下,以便后续的断点。
当文件传输中断之后用户再次选择文件就可以通过标识来判断文件是否已经上传了一部分,如果是的话,那么我们可以接着上次的进度继续传文件,以达到续传的功能。
四、文件的前端切片
有了HTML5 的 File api之后切割文件比想想的要简单的多的多。
只要用slice 方法就可以了
var packet = file.slice(start, end);
参数start是开始切片的位置,end是切片结束的位置 单位都是字节。通过控制start和end 就可以是实现文件的分块
如
file.slice(0,1000);
file.slice(1000,2000);
file.slice(2000,3000);
// ......
五、文件片段的上传
上一部我们通过slice方法把文件分成了若干块,接下来要做的事情就是把这些碎片传到服务器上。
这里我们用ajax的post请求来实现
textpop-up
var xhr = new XMLHttpRequest();
var url = xxx // 文件上传的地址 可以包括文件的参数 如文件名称 分块数等以便后台处理
xhr.open('POST', url, true);
xhr.onload = function (e){
// 判断文件是否上传成功,如果成功继续上传下一块,如果失败重试该快
}
xhr.upload.onprogress = function(e){
// 选用 如果文件分块大小较大 可以通过该方法判断单片文件具体的上传进度
// e.loaded 该片文件上传了多少
// e.totalSize 该片文件的总共大小
}
xhr.send(packet);
⑽ iOS视频断点续传如何实现的呢
- (IBAction)resumeInterruptedDownload:(id)sender { NSURL *url = [NSURL URLWithString: ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; NSString *downloadPath = @"/Users/ben/Desktop/asi.png"; //当request完成时,整个文件会被移动到这里 [request setDownloadDestinationPath:downloadPath]; //这个文件已经被下载了一部分 [request setTemporaryFileDownloadPath:@"/Users/ben/Desktop/asi.png.download"]; [request :YES]; [request startSynchronous]; //整个文件将会在这里 NSString *theContent = [NSString stringWithContentsOfFile:downloadPath]; } 断点续传的工作原理是读取temporaryFileDownloadPath的文件的大小,并使用Range: bytes=x HTTP头来请求剩余的文件内容。 ASIHTTPRequest并不检测是否存在Accept-Ranges头(因为额外的HEAD头请求会消耗额外的资源),所以只有确定服务器支持断点续传下载时,再使用这个特性。转载,仅供参考。