<%
/*
文件名可存为: 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";
/*
文件名可存为: 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 (r