用Java实现断点续传(HTTP)

断点续传的原理

 

其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:
假设服务器域名为wwww.sjtu.edu.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了。

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

 

package com.zzvcom.common;   
  
import java.io.BufferedInputStream;   
import java.io.File;   
import java.io.FileInputStream;   
import java.io.OutputStream;   
  
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
/**  
 * 断点续传  
 */  
public abstract class FileRender   
{   
    public static void RenderDownloadFile(HttpServletResponse response,   
            HttpServletRequest request, File file, String fileName)   
    {   
  
      try  
        {   
  
            response.reset();   
            response.setContentType("application/octet-stream");   
           response.setHeader("Accept-Ranges", "bytes");   
            response.setHeader("Content-Disposition", "attachment; filename="  
                    + java.net.URLEncoder.encode(fileName, "UTF-8"));   
           response.setHeader("Content-Length", file.length() + "");   
            OutputStream os = response.getOutputStream();   
            String range = request.getHeader("Range");   
            FileInputStream fis = new FileInputStream(file);   
            byte[] bytes = new byte[1024];   
            if (range != null)   
            {   
 
                range = range.substring("bytes=".length(), range.length() - 1);   
               long start = Long.parseLong(range);   
                fis.skip(start);   
                long l = file.length();   
                String contentRange = new StringBuffer("bytes ").append(start)   
                       .append("-").append(l - 1).append("/").append(l)   
                     .toString();   
               response.setHeader("Content-Range", contentRange);   
               response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);   
 
            }   
            BufferedInputStream buff = new BufferedInputStream(fis);   
           int len = 0;   
           while ((len = buff.read(bytes)) > 0)   
            {   
                os.write(bytes, 0, len);   
           }   
           buff.close();   
        }   
       catch (Exception e)   
        {   
          e.printStackTrace();   
       }   
 
   }   
}  

 

 

此文来自:http://www.ibm.com/developerworks/cn/java/joy-down/index.html

AXI Timer IP核使用说明 AXI Timer是提供定时技术功能的集成IP核,具有时间生成、事件捕获、产生PWM波以及产生中断的功能,下面具体讲述Timer IP核的使用说明。 阅读详情

相关推荐

基于PDF文档结构的数字隐写

PDF隐写

xiongshivigor的博客 1426

java http断点续传_Java如何实现HTTP断点续传功能

(一)断点续传的原理其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, app...

weixin_42514394的博客 1193

多层感知机 Multilayer Perceptron | MLP

本文主要简单介绍了多层感知机的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型的参数等。

JasonH2021的博客 3万+

java断点续传 http_用 Java 实现断点续传 (HTTP)

主要借助http响应头的Content-Range=bytes 2000070-106786027/106786028参数,和请求头的RANGE: bytes=2000070-当然也可以不借助这些字段,可以自己实现,比如不按字节,可以按行,按块,等等, 当然这样,服务器端和客户端都需要编码了。断点续传的原理其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。打个比方,浏览...

weixin_34608222的博客 494

思博伦仪表打流测试使用总结

下图红框中的checkbox为选中状态时,表示该流会携带测试仪做一些分析,包括时延和乱序等信息时需要的一些字节,当改选项选中时,如配置IPv4的TCP流,最小字节长度必须为78字节;如果需要64字节的TCP流,改选项必须不选中;

陌上花开缓缓归以的博客 1463

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

JAVA 实现 HTTP 断点续传及原理

断点续传原理: 现在有一个文件需要我们进行下载,当我们下载了一部分的时候,出现情况了,比如:电脑死机、没电、网络中断等等。 对于以上行为,如果“下载”的行为无法记录本次下载的一个进度。那么,当我们再次下载这个文件也就只能从头来过。 所以,要实现让一种断开的行为“续”起来的目的,关键就在于要有“介质”能够记录和读取行为出现”中断”的这个节点的信息。 实际上这就是“断点续传”的基础原理,用大白话

二一点 7264

汽车OTA 测试用例

汽车OTA 测试用例

天赐好车的博客 973

java 实现断点续传_用 Java 实现断点续传 (HTTP)

断点续传的原理其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为 wwww.sjtu.edu.cn,文件名为 down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, ap...

weixin_28808145的博客 506

SAP PI 系统复制,不只是把数据库拷过去,而是一次集成拓扑的重新落位

文章摘要:SAP PI/PO系统刷新生产数据到测试环境时,标准系统复制无法自动处理集成中枢特有的环境绑定问题。系统复制后,PI仍保留生产环境的连接配置,可能导致测试系统向生产环境发送消息。SAP提供的CTC模板可自动化部分后续配置,但无法替代人工对接口风险的全面评估。关键在于系统复制前绘制接口风险地图,复制后进行分层次验证:禁用生产连接、重定向测试接口、复核安全配置,并通过代表性链路测试确保系统行为符合预期。这需要结合SAP标准流程与业务语义判断,形成完整的治理闭环。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 82

OpenCV计算机视觉实战(3)——计算机图像处理基础

本文全面介绍了计算机视觉和数字图像处理的基础知识。从最基本的像素概念入手,详细讲解了图像在计算机中的表示方式,包括RGB、CMYK等色彩空间的工作原理及其应用场景。还系统分析了常见图像和视频文件格式的特点,梳理了计算机图像处理技术的发展历程,并重点介绍了OpenCV这一强大的开源计算机视觉库的功能与应用领域。

qq_30167691的博客 1739

用 Java 实现断点续传 (HTTP) | java教程

用 Java 实现断点续传 (HTTP)断点续传是一种实现文件下载的机制,可以在中断下载后从上次下载的地方继续下载。在 HTTP 请求中实现断点续传与常规下载有所不同。

qq_29639425的博客 1144

24届数字IC验证——SV+UVM基础知识汇总(一)

汇总整理在面试过程中常见的问题,如果都能回答下来,那么面试肯定不成问题的分别构建不同抽象级的transaction,来实现复杂的激励。(以前是单一层次的sequence,对激励复用、上层复用不塌友好)不同层级之间的sequence没有继承关系,相互之间进行转换低层次的sequence从高层次的sequencer中获取高层次的sequence,并将其转换为低层次的sequence,再通过低层次的sequencer发送出去如何连接:低层次的sequencer包含高层次sequencer的句柄。

qq_42135020的博客 3145

JAVA如何实现HTTP的断点续传

(一)断点续传的原理 其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,

Alan的专栏 470

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JAVA编程技巧之如何实现HTTP的断点续传

cx510158746的专栏 597

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

http断点续传java_用 Java 实现断点续传参考 (HTTP)

断点续传的原理其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 wwww.sjtu.edu.cn,文件名为 down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, i...

weixin_42567279的博客 191

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

用 Java 实现断点续传 (HTTP)

断点续传的原理 其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 wwww.sjtu.edu.cn,文件名为 down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image...

cowboy258的博客 1812

Java实现HTTP的断点续传

(一)断点续传的原理 其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, imag...

冯友华的专栏 546

用Java实现HTTP断点续传

用Java实现HTTP断点续传(一)断点续传的原理   其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:  假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jp

duanxd的专栏 1452

Java实现http中的文件下载断点续传

实现思路: 1、创建一个下载任务类DownLoadTaskInfo(用于记录文件保存的目录,文件下载URL,文件名) 2、创建一个FileAccess 用于随机访问文件,向文件写入内容。 3、创建一个下载任务执行线程DownLoadTaskExecution,此线程主要做如下工作 接受指定 下载子线程个数 首先判断下载的文件是否存在, 如果下载的文件已经存在,则继续判断它对应的xxx.in...

riemann_的博客 4938

如何用Java实现HTTP断点续传功能

alimama_pid="mm_10029469_121618_2142302"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000";

为天加朵云... 1508

Java如何实现HTTP断点续传功能

参考文章:http://blog.ncmem.com/wordpress/2023/10/18/java%e5%a6%82%e4%bd%95%e5%ae%9e%e7%8e%b0http%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0%e5%8a%9f%e8%83%bd/SiteInfoBean.java要抓取的文件的信息,如文件保存的目录,名字,抓取文件的URL等。服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下。包括一系列的线程控制等等。

weixin_52041354的博客 109
上一篇: Linux下scp的用法
下一篇: EXT2.0+STRUTS2框架下的文件上传和中文文件下载
java2_0_1_0
博客等级 码龄17年 0粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值