1. <%
      //你可以使用你服务器上的文件及其路径
      String s = "E:\\resin-2.1.14\\webapps\\ROOT\\reg.bat";

    //RandomAccessFile 方式
      java.io.RandomAccessFile raf = new java.io.RandomAccessFile(s,"r");

    //FileInputStream 方式
      //java.io.File f = new java.io.File(s);
      //java.io.FileInputStream fis = new java.io.FileInputStream(f);

    response.reset();

    response.setHeader("Server", "ad@Interdrp.com");

    //告诉客户端允许断点续传多线程连接下载
      response.setHeader("Accept-Ranges", "bytes");

    long p = 0;
      long l = 0;
      l = raf.length(); //RandomAccessFile 方式
      //l = f.length(); //FileInputStream 方式

    //如果是第一次下,还没有断点续传,状态是默认的 200,无需显式设置

    if (request.getHeader("Range") != null) //客户端请求的下载的文件块的开始字节
      {
       //如果是下载文件的范围而不是全部,向客户端声明支持并开始文件块下载
       //要设置状态
       //响应的格式是:
       //HTTP/1.1 206 Partial Content
       response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);//206

    //从请求中得到开始的字节
       //请求的格式是:
       //Range: bytes=[文件块的开始字节]-
       p = Long.parseLong(request.getHeader("Range").replaceAll("bytes=","").replaceAll("-",""));
      }

    //下载的文件(或块)长度
      //响应的格式是:
      //Content-Length: [文件的总大小] - [客户端请求的下载的文件块的开始字节]
      response.setHeader("Content-Length", new Long(l - p).toString());

    if (p != 0)
      {
       //不是从最开始下载,
       //响应的格式是:
       //Content-Range: bytes [文件块的开始字节]-[文件的总大小 - 1]/[文件的总大小]
       response.setHeader("Content-Range","bytes " + new Long(p).toString() + "-" + new Long(l -1).toString() + "/" + new Long(l).toString());
      }

    //response.setHeader("Connection", "Close"); //如果有此句话不能用 IE 直接下载

    //使客户端直接下载,
      //响应的格式是:
      //Content-Type: application/octet-stream
      response.setContentType("application/octet-stream");

    //为客户端下载指定默认的下载文件名称
      //响应的格式是:
      //Content-Disposition: attachment;filename="[文件名]"
      response.setHeader("Content-Disposition", "attachment;filename=\"" + s.substring(s.lastIndexOf("\\") + 1) + "\""); //RandomAccessFile 方式
      //response.setHeader("Content-Disposition", "attachment;filename=\"" + f.getName() + "\""); //FileInputStream 方式

    raf.seek(p);
      //fis.skip(p);

    byte[] b = new byte[1024];
      int i;

    while ( (i = raf.read(b)) != -1 )  //RandomAccessFile 方式
      //while ( (i = fis.read(b)) != -1 ) //FileInputStream 方式
      {
       response.getOutputStream().write(b,0,i);
      }
      raf.close();   //RandomAccessFile 方式
      //fis.close(); //FileInputStream 方式
    %>

JSP断点续传多线程链接下载相关推荐

  1. python3.6进度条_Python实现下载界面(带进度条,断点续传,多线程多任务下载等)...

    开发环境: Windows 7 64位,Python 3.6.2 实现功能: 进度条,下载速度和下载进度的显示,断点续传(暂停继续下载功能),取消下载等功能 下载界面,如图所示 点击'新建任务',弹出 ...

  2. python3多线程断点下载_python支持断点续传的多线程下载示例 -电脑资料

    复制代码代码如下: #! /usr/bin/env python #coding=utf-8 from __future__ import unicode_literals from multipro ...

  3. 断点续传---多线程下载进阶(一)

    打算总结7篇笔记.来学习下断点续传---多线程下载进阶 AndroidManifest.xml <?xml version="1.0" encoding="utf- ...

  4. 安卓day29网络编程 HttpClient AsyncHttpClient 断点续传多线程下载器 HttpUtils

    一.排坑 HttpClient.Header飘红 Android 6.0 已经移除了httpClient module下的build.gradle中加入: android{useLibrary 'or ...

  5. 如何实现 HTTP 断点续传多线程下载

    1. HTTP断点续传多线程下载 一个比较常见的场景,就是断点续传/下载,在网络情况不好的时候,可以在断开连接以后,仅继续获取部分内容. 例如在网上下载软件,已经下载了 95% 了,此时网络断了,如果 ...

  6. curl命令断点续传多线程下载文件

    新版本发布 curl命令7.66.0版本支持多线程下载 参考:https://daniel.haxx.se/blog/2019/09/11/curl-7-66-0-the-parallel-http- ...

  7. 下载神器:axel aria2 mwget多线程快速下载取代curl和wget的多线程下载命令

    对于在 Linux 的下载工具而言,比较常用的就是 wget 或者 curl,吾也一直用 wget 的方式进行网络上的资源下载.偶然发现了 axel 这个支持多线程的下载工具,试用了几次之后,发现网络 ...

  8. python 下载qq群文件_利用多线程快速下载腾讯QQ群文件的方法

    引言: 众所周知,用QQ客户端下载QQ群文件的速度实在是缓慢,这里讲一下如何利用多线程快速下载腾讯QQ群文件. 原始事件发生在2018年8月4日,笔者的同学制作了一个毕业短片并且将其上传到了班级的QQ ...

  9. python下载vip素材_Python素材下载爬虫,多线程rar下载爬虫

    一个多线程素材下载爬虫,实现多线程素材下载,包含素材包rar,素材图及素材描述,应用了经典的生产者与消费者模式,不过数据没有下载全,容易出现卡死的问题,期待后期能够解决相关问题,可以算是一个半成品,供 ...

最新文章

  1. 处理xmpp 离线信息,
  2. Android面试:Java相关
  3. Leetcode:convert_sorted_array_to_binary_search_tree
  4. 红黑树分为红和黑有什么好处_BAT面试程序员必问:什么是红黑树?
  5. 学习笔记---将Asp.Net网站发布到IIS的四种方法及注意事项
  6. [2019杭电多校第二场][hdu6602]Longest Subarray(线段树)
  7. hibernate 反向生实体类 and 为什么老是多一个id
  8. 基于行政区划的百度个性化地图及遥感影像栅格瓦片下载合成器(可叠加行政区划,适合用作科研遥感影像附图)
  9. AutoPatch java_EBS开发技术之Patch安装
  10. 努力不是为了追赶别人,只是为了超越自己
  11. Python实现线性函数的拟合算法
  12. oracle 12988,ORA-12988: cannot drop column from table owned by SYS
  13. DotNetTools Workflow教程
  14. 启动到APP的设置页,小米手机自启动管理页,小米手机APP权限管理页
  15. EF6 T4 Model.TT文件的修改-自动加上注释
  16. 贷款的五种方法,解决您的购房资金问题
  17. matlab第六章课后答案,MATLAB教程2012a第6章习题解答-张志涌
  18. iOS开发经常使用国外站点清单
  19. ERP实施-保密配方管理方案
  20. 定制自己的火狐搜索插件 searchplugins

热门文章

  1. [IE兼容性] Table 之边框
  2. UVALive - 6440
  3. 西安外国语大学计算机基础,西安外国语大学教务处.PDF
  4. android传感器开发与智能设备案例实战_【我的物联网成长记2】设备如何进行选型?...
  5. Oracle dbms_job管理
  6. python手机编译器推荐_Python编译器最新版|Python编译器手机版下载 v1.2 安卓版 - 数码资源网...
  7. 印象笔记打开错误_印象笔记新增桌面便签功能
  8. java response文件流下载,后缀名称设置
  9. RabbitMQ-Java实现Publish/Subscribe订阅模式
  10. JDK8的LocalDateTime用法