`

使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! JSP/Servlet 实现!

 
阅读更多

<%
/*
文件名可存为: Download.jsp
HTTP 协议的请求与响应的会话过程可通过使用 FlashGet 下载 Http:// 连接的过程监视:
蓝色部分为: 客户端请求
紫色部分为: 服务器端响应
如图:
http://blog.csdn.net/images/blog_csdn_net/playyuer/30110/o_FlashGet.gif
或参阅,后面的 FlashGet 会话列表:

*/
//你可以使用你服务器上的文件及其路径
String s = "I://SetupRes//Sun//j2re-1_4_2_05-windows-i586-p.exe";
//String s = "e://tree.mdb";

//经测试 RandomAccessFile 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
//java.io.RandomAccessFile raf = new java.io.RandomAccessFile(s,"r");

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

response.reset();

response.setHeader("Server", "playyuer@Microshaoft.com ");

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

long p = 0;
long l = 0;
//l = raf.length();
l = f.length();

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

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 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
response.setHeader("Content-Disposition", "attachment;filename=/"" + f.getName() + "/"");

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

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


//while ( (i = raf.read(b)) != -1 ) //经测试 RandomAccessFile 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
while ( (i = fis.read(b)) != -1 )
{
response.getOutputStream().write(b,0,i);
}
//raf.close();//经测试 RandomAccessFile 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
fis.close();
%>

==========================================================================

在 FlashGet 中
一组第一次直接下载,还没有断点续传 HTTP 会话过程:
客户端请求:
Mon Aug 02 05:46:36 2004 正在连接 download2.flashfxp.com:80
Mon Aug 02 05:46:36 2004 正在连接 download2.flashfxp.com [IP=66.98.228.125:80]
Mon Aug 02 05:46:37 2004 已连接.
Mon Aug 02 05:46:37 2004 GET /zip/FlashFXP_30_Setup.exe HTTP/1.1
Mon Aug 02 05:46:37 2004 Host: download2.flashfxp.com
Mon Aug 02 05:46:37 2004 Accept: */*
Mon Aug 02 05:46:37 2004 Referer: http://playyuer.microshaoft.com
Mon Aug 02 05:46:37 2004 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Mon Aug 02 05:46:37 2004 Pragma: no-cache
Mon Aug 02 05:46:37 2004 Cache-Control: no-cache
Mon Aug 02 05:46:37 2004 Authorization: Basic MGRheTpjY2ZfZG93bmxvYWQ=
Mon Aug 02 05:46:37 2004 Connection: close

服务器端响应:
Mon Aug 02 05:46:37 2004 HTTP/1.1 200 OK
Mon Aug 02 05:46:37 2004 Date: Sun, 01 Aug 2004 21:46:29 GMT
Mon Aug 02 05:46:37 2004 Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_fastcgi/2.2.12 mod_gzip/1.3.19.1a mod_jk/1.2.0 mod_perl/1.26 PHP/4.3.3 FrontPage/5.0.2 mod_ssl/2.8.12 OpenSSL/0.9.6b
Mon Aug 02 05:46:37 2004 Last-Modified: Fri, 30 Jul 2004 18:41:18 GMT
Mon Aug 02 05:46:37 2004 ETag: "4f80fa-1ecf20-410a964e"
Mon Aug 02 05:46:37 2004 Accept-Ranges: bytes
Mon Aug 02 05:46:37 2004 Content-Length: 2019104
Mon Aug 02 05:46:37 2004 Connection: close
Mon Aug 02 05:46:37 2004 Content-Type: application/octet-stream


一组断点续传的 HTTP 会话过程:
客户端请求:
Mon Aug 02 05:27:05 2004 正在连接 download2.flashfxp.com:80
Mon Aug 02 05:27:05 2004 正在连接 download2.flashfxp.com [IP=66.98.228.125:80]
Mon Aug 02 05:27:05 2004 已连接.
Mon Aug 02 05:27:05 2004 GET /zip/FlashFXP_30_Setup.exe HTTP/1.1
Mon Aug 02 05:27:05 2004 Host: download2.flashfxp.com
Mon Aug 02 05:27:05 2004 Accept: */*
Mon Aug 02 05:27:05 2004 Referer: http://playyuer.microshaoft.com
Mon Aug 02 05:27:05 2004 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Mon Aug 02 05:27:05 2004 Range: bytes=191621-
Mon Aug 02 05:27:05 2004 Pragma: no-cache
Mon Aug 02 05:27:05 2004 Cache-Control: no-cache
Mon Aug 02 05:27:05 2004 Authorization: Basic MGRheTpjY2ZfZG93bmxvYWQ=
Mon Aug 02 05:27:05 2004 Connection: close

服务器端响应:
Mon Aug 02 05:27:06 2004 HTTP/1.1 206 Partial Content
Mon Aug 02 05:27:06 2004 Date: Sun, 01 Aug 2004 21:26:57 GMT
Mon Aug 02 05:27:06 2004 Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_fastcgi/2.2.12 mod_gzip/1.3.19.1a mod_jk/1.2.0 mod_perl/1.26 PHP/4.3.3 FrontPage/5.0.2 mod_ssl/2.8.12 OpenSSL/0.9.6b
Mon Aug 02 05:27:06 2004 Last-Modified: Fri, 30 Jul 2004 18:41:18 GMT
Mon Aug 02 05:27:06 2004 ETag: "4f80fa-1ecf20-410a964e"
Mon Aug 02 05:27:06 2004 Accept-Ranges: bytes
Mon Aug 02 05:27:06 2004 Content-Length: 1827483
Mon Aug 02 05:27:06 2004 Content-Range: bytes 191621-2019103/2019104
Mon Aug 02 05:27:06 2004 Connection: close
Mon Aug 02 05:27:06 2004 Content-Type: application/octet-stream

分享到:
评论

相关推荐

    C#实现支持断点续传多线程下载客户端工具类

    代码如下: /* .Net/C#: 实现支持断点续传多线程下载的 ... * 了解服务器端与客户端交互的 HTTP 协议参阅: * 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! JSP/Servlet 实现! * http://blog.cs

    多线程 断点续传 下载

    多线程 断点续传 java 下载 java多线程实例

    多线程下载工具,支持断点续传

    仿Flashget 多线程下载工具,支持断点续传

    多线程下载工具源码支持断点续传(模拟FlashGet)

    快车采用基于业界领先的MHT下载技术给用户带来超高速的下载体验;全球首创SDT插件预警技术充分确保安全下载;兼容BT、传统(HTTP、FTP等)等多种下载方式更能让您充分享受互联网海量下载的乐趣。下载的最大问题是...

    VC中ftp协议实现多线程断点续传

    ftp下载的好处我在这里就不多说了,许多工程会把ftp下载作为一个重要的功能来实现。微软提供的WinInet类可以利用下面这些函数:  InternetOpen;  InternetConnect;  GetCurrentDirectory;  ...

    flashget多线程版

    flashget多线程版,支持1000个线程同时下载,快!

    断点续传下载

    不能装多线程的东东我一直用这个下载我要的大文件,“大富翁”200多M的离线数据这是用它下载的。 大家对源码有什么不明白的请在“http://www.delphibbs.com/delphibbs/dispq.asp?lid=1170159”中提 出。  ...

    flashget上传下载工具

    上传下载必用工具,本人实际安装没有问题,请放心下载

    flashget 线程破解补丁

    突破flashget原有的十个线程,不过不要把线程挑的太大,要不对机器不好噢!

    一个非常老的FlashGet下载工具

    能够下载一些受限制的网站的东西,新版本的迅雷和FlashGet因为有链接转移体系而无法下载某些网站的东西,可以使用这个老版本的进行下载。

    古老的多线程下载FlashGet165a.exe

    古老的多线程下载FlashGet165a.exe现在用起来才感觉好用: 现在超线程下载象病毒又象木马,监视一下网络流量,发现发出的比下载的多10倍。本来宽带是上行小下行大,搞得抢线慢死。也不都从我机子上拿些什么东西。...

    NetMoles Downloader Full 2.4(网络鼹鼠).rar

    将文件分成多个部分同时下载,通过多线程,断点续传等技术最大限度地提高下载速度;为了有效地管理下载的文件,可以创建不同的类别,把下载的软件分类存放;下载的任务可以根据相应的信息进行排序,查询;改进一些...

    Internet Download Accelerator v5.16简体中文版(附注册码).rar

    Internet Download Accelerator是一款多线程下载工具,它支持HTTP/FTP协议,支持断点续传及队列下载,安装后会自动集成到IE等浏览器中,当有文件下载时会自动调用它进行下载。可以根据网络状况设置速度及带宽,...

    ntko文件上传控件

    NTKO大文件上传控件,采用多线程技术,提供专业的大文件上传解决方案。...上传到WEB服务器的文件,通过web服务器编程支持,还可以采用迅雷,FLASHGET等支持断点续传下载的工具软件进行多线程,可续传的下载。

    IIS FILTER AntiRange.rar

    目前个人网站上的文件被盗链现象很普遍,尤其是迅雷、flashget等P2SP下载软件均实现了伪造访问来源,使用这些软件的用户为了实现下载速度最大化,通常无须访问您的页面,就能从您的服务器下载文件的部分内容。...

    网际快车(FlashGet) v1.9.6.1073 国际版

    通过多线程、断点续传、镜像等技术最大限度地提高下载速度。 支持镜像功能,可手动也可自动通过Ftp Search自动查找镜像站点,并且可通过最快的站点下载。 可创建不同的类别,把下载的软件分门别类的存放。强大的管理...

    IIS FILTER AntiRange

    目前个人网站上的文件被盗链现象很普遍,尤其是迅雷、flashget等P2SP下载软件均实现了伪造访问来源,使用这些软件的用户为了实现下载速度最大化,通常无须访问您的页面,就能从您的服务器下载文件的部分内容。...

    netcamels

    可以利用的技术手段,如多点连接、断点续传等,特别是加上了多代理连接功能。尽可能的突 破各种限制,使你在现有的条件下,大大地加快了下载的速度。网络骆驼象征着在茫茫沙漠上 的骆驼队,克服一切困难,在最艰苦...

    Java多线程下载工具

    Java多线程下载工具

    Flashget下载工具软件

    FlashGet 下载工具,老版本,好用的!没有现在的下载工具这么多的广告等,爽!

Global site tag (gtag.js) - Google Analytics