linux下实现断点续传的原理介绍

author author     2023-04-28     254

关键词:

参考技术A

   Linux下实现断点续传的原理介绍

  断点续传的原理

  其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。

  打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:

  假设服务器域名为 ,文件名为 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 了。

  知道了以上原理,就可以进行断点续传的编程了。

  Java 实现断点续传的关键几点

  (1) 用什么方法实现提交 RANGE: bytes=2000070-。

  当然用最原始的 Socket 是肯定能完成的,不过那样太费事了,其实 Java 的 net 包中提供了这种功能。代码如下:

  URL url = new URL(“/down.zip”);

  HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection();

  // 设置 User-Agent

  httpConnection.setRequestProperty(“User-Agent”,“NetFox”);

  // 设置断点续传的开始位置

  http Connection.setRequestProperty(“RANGE”,“bytes=2000070”);

  // 获得输入流

  InputStream input = httpConnection.getInputStream();

  从输入流中取出的字节流就是 down.zip 文件从 2000070 开始的字节流。 大家看,其实断点续传用 Java 实现起来还是很简单的吧。 接下来要做的事就是怎么保存获得的流到文件中去了。

  保存文件采用的方法。

  我采用的是 IO 包中的 RandAccessFile 类。

  操作相当简单,假设从 2000070 处开始保存文件,代码如下:

  RandomAccess oSavedFile = new RandomAccessFile(“down.zip”,“rw”);

  long nPos = 2000070;

  // 定位文件指针到 nPos 位置

  oSavedFile.seek(nPos);

  byte[] b = new byte[1024];

  int nRead;

  // 从输入流中读入字节流,然后写到文件中

  while((nRead=input.read(b,0,1024)) 》 0)

  

  oSavedFile.write(b,0,nRead);

  

  以上就是断点续传的原理,知道这些原理,相信大家都能够进行编程了吧,这个技术在现在的电脑技术上也算不得什么,打家应该都注意到我们下载时都是断点续传吧

断点续传实现

断点续传实现:简单来说应该分为两个角度来看待:1、将要续传的文件2、续传的文件一、将要续传的文件先说说将要续传的文件,既然是续传,那么肯定要有个标识,举例说明一下:  事先准备一个文件,大小是1852... 查看详情

winform实现断点续传的思路及代码

...)。把他的代码拆出来使用了。 虽然不同的断点续传实现可能不同,不过思路应该都是相似的。 思路 查看详情

断点续传的实现(代码片段)

文章目录从上次断开位置继续下载实现原理(客户端):HTTP实现(流程):图1:客户端Range头部信息图2:服务端Content-Range信息客户端与服务端的请求与响应图解:获取文件ETag的函数:下载... 查看详情

html超大文件上传和断点续传的实现

需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步:前端修改由于项目使用的是BJUI前端框架,... 查看详情

http断点续传原理

这周完成了一个断点续传的功能。我们的游戏里加载地图的逻辑简化而言是这样:1.首先用本地的md5文件校验地图文件(很多文件)是否完整。(中间有很多步骤,任何步骤失败都认为地图不完整)2.如果完整,直接加载地图。3.... 查看详情

断点续传

虽然断点续传已经会了,也知道一些原理,但是总感觉没有吃透,就像别人给我一个东西,告诉我要这么做,但却不是很明白为什么要这么做,这里看到一篇文章,不算难,也不多,算是对理论... 查看详情

使用js实现可断点续传的文件上传方案(代码片段)

刚开始学习前端开发就碰到文件上传问题,还要求可断点续传。查了很多资料,发现H5的fileAPI刚好可以满足我们的需求,也遇到了一些问题,于是记录下来为有同样需求的朋友提供一些帮助。一、首先,为了引入文件对象,我们... 查看详情

掀开断点续传那一层面纱(下载篇)

1、简介  这一篇文章主要介绍的是http协议下载时的断点续传,详细到各个步骤。主要步骤有:DNS查找、TCP三次握手、http请求发送、TCP协议数据传输、暂停后的状态、继续下载、TCP三次握手、http请求发送、数据传输、。。。... 查看详情

超大文件上传和断点续传的组件

...ntent-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:  查看详情

断点续传基本原理初了解

断点续传的理解可以分为两部分:一部分是断点,一部分是续传。断点的由来是在下载过程中,将一个下载文件分成了多个部分,同时进行多个部分一起的下载,当某个时间点,任务被暂停了,此时下载暂停的位置就是断点了。... 查看详情

支持断点续传的大文件传输协议

...段,在数据通信领域一直发挥着举足轻重的作用,不支持断点续传,是Internet上最早也是最广泛使用的应用之一.从1971年A.K.Bhushan提出第一个FTP协议版本(RFC114)到现在,人们对FTP的应用已经历了40余年的时间,同时,许多基于FTP... 查看详情

局域网超大文件上传和断点续传的实现

...都是web开发所必须直面的。本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路。实现文件夹上传,要求:服务端保留层级结构,支持10w级别的文件夹上传。大文件上传及断点续传,要求:支持50G... 查看详情

局域网超大文件上传和断点续传的实现

...都是web开发所必须直面的。本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路。实现文件夹上传,要求:服务端保留层级结构,支持10w级别的文件夹上传。大文件上传及断点续传,要求:支持50G... 查看详情

基于http的文件断点续传实现(代码片段)

基于Http的文件断点续传实现1:断点续传的介绍客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如... 查看详情

超大文件上传和断点续传的实现

之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需求,都能得到满足。小... 查看详情

前端实现文件的断点续传

 早就听说过断点续传这种东西,前端也可以实现一下断点续传在前端的实现主要依赖着HTML5的新特性,所以一般来说在老旧浏览器上支持度是不高的 本文通过断点续传的简单例子(前端文件提交+后端PHP文件接收),理解... 查看详情

断点续传

早就听说过断点续传这种东西,前端也可以实现一下断点续传在前端的实现主要依赖着HTML5的新特性,所以一般来说在老旧浏览器上支持度是不高的本文通过断点续传的简单例子(前端文件提交+后端PHP文件接收),理解其大致的... 查看详情

前端实现文件的断点续传

早就听说过断点续传这种东西,前端也可以实现一下断点续传在前端的实现主要依赖着HTML5的新特性,所以一般来说在老旧浏览器上支持度是不高的本文通过断点续传的简单例子(前端文件提交+后端PHP文件接收),理解其大致的... 查看详情