`
lovebirdegg
  • 浏览: 175585 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

[JSP]断点续传多线程链接下载! JSP/Servlet 实现

阅读更多

 

[JSP]断点续传多线程链接下载! JSP/Servlet 实现
2008年04月23日 下午 05:15
  1. < %
  2. /*
  3.    文件名可存为: Download.jsp
  4.    HTTP 协议的请求与响应的会话过程可通过使用 FlashGet 下载 Http:// 连接的过程监视:
  5.    蓝色部分为: 客户端请求
  6.    紫色部分为: 服务器端响应
  7.    如图:
  8.    http://blog.csdn.net/images/blog_csdn_net/playyuer/30110/o_FlashGet.gif
  9.    或参阅,后面的 FlashGet 会话列表:
  10.   
  11. */
  12.    //你可以使用你服务器上的文件及其路径
  13.    String   s   =   "I:\\SetupRes\\Sun\\j2re-1_4_2_05-windows-i586-p.exe" ;
  14.    //String s = "e:\\tree.mdb";
  15.    //经测试 RandomAccessFile 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
  16.    //java.io.RandomAccessFile raf = new java.io.RandomAccessFile(s,"r");
  17.    java . io . File   f   =   new   java . io . File ( s ) ;
  18.    java . io . FileInputStream   fis   =   new   java . io . FileInputStream ( f ) ;
  19.    response . reset ( ) ;
  20.    response . setHeader ( "Server" ,   "playyuer@Microshaoft.com" ) ;
  21.    //告诉客户端允许断点续传多线程连接下载
  22.    //响应的格式是:
  23.    //Accept-Ranges: bytes
  24.    response . setHeader ( "Accept-Ranges" ,   "bytes" ) ;
  25.    long   p   =   0 ;
  26.    long   l   =   0 ;
  27.    //l = raf.length();
  28.    l   =   f . length ( ) ;
  29.    //如果是第一次下,还没有断点续传,状态是默认的 200,无需显式设置
  30.    //响应的格式是:
  31.    //HTTP/1.1 200 OK
  32.    if   ( request . getHeader ( "Range" )   !=   null )   //客户端请求的下载的文件块的开始字节
  33.    {
  34.     //如果是下载文件的范围而不是全部,向客户端声明支持并开始文件块下载
  35.     //要设置状态
  36.     //响应的格式是:
  37.     //HTTP/1.1 206 Partial Content
  38.     response . setStatus ( javax . servlet . http . HttpServletResponse . SC_PARTIAL_CONTENT ) ; //206
  39.     //从请求中得到开始的字节
  40.     //请求的格式是:
  41.     //Range: bytes=[文件块的开始字节]-
  42.     p   =   Long . parseLong ( request . getHeader ( "Range" ) . replaceAll ( "bytes=" , "" ) . replaceAll ( "-" , "" ) ) ;
  43.    }
  44.    //下载的文件(或块)长度
  45.    //响应的格式是:
  46.    //Content-Length: [文件的总大小] - [客户端请求的下载的文件块的开始字节]
  47.    response . setHeader ( "Content-Length" ,   new   Long ( l   -   p ) . toString ( ) ) ;
  48.    if   ( p   !=   0 )
  49.    {
  50.     //不是从最开始下载,
  51.     //响应的格式是:
  52.     //Content-Range: bytes [文件块的开始字节]-[文件的总大小 - 1]/[文件的总大小]
  53.     response . setHeader ( "Content-Range" , "bytes "   +   new   Long ( p ) . toString ( )   +   "-"   +   new   Long ( l   - 1 ) . toString ( )   +   "/"   +   new   Long ( l ) . toString ( ) ) ;
  54.    }
  55.    //response.setHeader("Connection", "Close"); //如果有此句话不能用 IE 直接下载
  56.    //使客户端直接下载
  57.    //响应的格式是:
  58.    //Content-Type: application/octet-stream
  59.    response . setContentType ( "application/octet-stream" ) ;
  60.    //为客户端下载指定默认的下载文件名称
  61.    //响应的格式是:
  62.    //Content-Disposition: attachment;filename="[文件名]"
  63.    //response.setHeader("Content-Disposition", "attachment;filename=\"" + s.substring(s.lastIndexOf("\\") + 1) + "\""); //经测试 RandomAccessFile 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
  64.    response . setHeader ( "Content-Disposition" ,   "attachment;filename=\""   +   f . getName ( )   +   "\"" ) ;
  65.    //raf.seek(p);
  66.    fis . skip ( p ) ;
  67.    byte [ ]   b   =   new   byte [ 1024 ] ;
  68.    int   i ;
  69.    //while ( (i = raf.read(b)) != -1 ) //经测试 RandomAccessFile 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
  70.    while   (   ( i   =   fis . read ( b ) )   !=   - 1   )
  71.    {
  72.     response . getOutputStream ( ) . write ( b , 0 , i ) ;
  73.    }
  74.    //raf.close();//经测试 RandomAccessFile 也可以实现,有兴趣可将注释去掉,并注释掉 FileInputStream 版本的语句
  75.    fis . close ( ) ;
  76. % >
分享到:
评论
1 楼 enefry 2012-03-16  
如果 请求头是 range bytes=100-100  怎么处理

相关推荐

    java jsp+servlet实现文件下载(而不是在网页中显示出文件内容) 迅雷下载功能.zip

    我们可以在响应头中添加`Accept-Ranges`字段,表示支持分块下载,以适应迅雷的多线程下载特性。同时,确保文件大小正确返回,以便迅雷计算下载进度。 6. **安全与性能考虑**:在实际应用中,我们需要处理文件权限、...

    多线程文件下载

    这个项目专注于利用多线程技术实现文件的高效下载,同时支持断点续传功能,确保用户即使在网络不稳定的情况下也能顺利完成下载。接下来,我们将详细讨论相关知识点。 首先,我们来看“网络编程”。在计算机科学中,...

    JSP文件下载_jspsmart组件_轻松配置

    6. **多线程下载**:对于支持的浏览器,jspsmart组件可以开启多线程下载,提高下载速度。 在提供的压缩包文件中,我们有两个关键的JSP文件:`read.jsp`和`ReadFile.jsp`。它们可能是实现文件下载的核心代码。`read....

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...

    jspsmart 文件上传

    这个组件允许开发者在JSP或Servlet中方便地实现文件上传功能,支持断点续传、多文件同时上传以及文件大小限制等特性。 在使用jspsmart时,你需要了解以下几个关键知识点: 1. **文件上传原理**:文件上传通常涉及...

    jsp多文件上传实例

    它提到了"结合了流行的flash上传组件",这意味着此实例可能利用了Adobe Flash技术来提供用户界面,因为Flash曾经在支持大文件、多文件上传方面具有优势,可以提供良好的用户体验,例如进度条显示和断点续传等功能。...

    jspupload.rar_jspuplo_jspupload source_下载文件

    【标题】"jspupload.rar_jspuplo_jspupload source_下载文件" 是一个与Java Servlet Pages (JSP)相关的上传下载组件的源代码包。这个组件,名为jspupload,是一个专门为JSP开发的工具,它允许用户在Web应用程序中...

    jsp源码上传下载北雨下载系统v1.0.1-bydown101

    - **断点续传**:支持下载过程中断后继续从断点处下载剩余内容。 - **多线程下载**:采用多线程技术提高下载速度。 ### 部署与配置 #### 服务器环境准备 - **安装Java环境**:确保服务器已安装JDK 8或更高版本。 ...

    文件上传下载Jsp+mvc

    优化方面,可以采用多线程上传、断点续传、分块下载等技术提升用户体验。 6. **简珍珍--文件上传**:这个文件可能是项目中的一个组件或示例,具体包含的内容可能有相关的JSP页面、Servlet代码、控制器类、模型类等...

    AJAX+JSP实现基于WEB的文件上传的进度控制

    3. 多线程上传:对于大文件,可以采用分块上传的方式,利用XMLHttpRequest2的upload.onprogress事件,支持断点续传和多线程上传。 4. 错误处理:对可能出现的网络错误或服务器错误进行适当的错误提示和处理。 总结...

    JSP源码——[上传下载]宏软JSP上传系统 v2.0完美版_upload-v2.zip

    - **用户体验**:提供友好的上传界面,支持批量上传、断点续传等功能。 - **稳定性**:经过完善测试,保证在高并发环境下的稳定运行。 - **自定义配置**:允许开发者根据需求调整上传参数,如上传路径、文件大小...

    手机电影下载

    3. **多线程下载**:通过分割文件并同时下载多个部分,可以显著提高下载速度。这种技术需要对文件分块和并发控制有深入理解。 4. **断点续传**:当下载中断后,用户能够从上次停止的地方继续下载,这需要服务器和...

    JSP源码 铁人下载系统 Liuxing 1.0_liuxing1.0.rar

    此外,对于大文件下载,可能还采用了断点续传技术,允许用户中断后继续下载,提高用户体验。 5. **前端展示**:在用户界面方面,JSP页面通常结合HTML、CSS和JavaScript进行设计,提供友好的交互体验。用户可以看到...

    JSP源码——[上传下载]铁人下载系统 Liuxing 1.0_liuxing1.0.zip

    可能还会有断点续传和下载速度限制功能,以优化用户体验。 4. **数据库设计**:为了记录文件信息,如文件名、大小、上传时间、下载次数等,系统通常会有一个数据库来存储这些数据。可能采用的关系型数据库如MySQL,...

    jsp 大文件/文件夹上传控件

    3. **断点续传**:对于非常大的文件,控件可能还支持断点续传功能,即如果上传过程中网络中断,可以从上次中断的位置继续上传,而不是重新开始,这极大地提高了上传的可靠性。 4. **安全性**:在上传过程中,控件需...

    [上传下载]南京同庆水若寒开发的下载系统_downjsp.rar

    6. **性能优化**:为了提高用户体验,系统可能实现了大文件分块传输、断点续传、多线程下载等功能,这些都能显著提升下载速度和稳定性。同时,服务器端可能有缓存策略来减轻服务器压力。 7. **错误处理和日志记录**...

    jspsmartupload

    `jspsmartupload`是一个基于Java Web的文件上传和下载解决方案,主要利用JSP和Servlet技术来实现。这个项目的设计目标是提供一个批量处理文件上传和下载的功能,并且将文件的相关信息存储在数据库中,以便于管理和...

    JspSmartUpload(jar+使用说明)

    2. **断点续传**:虽然不是所有版本都支持,但某些高级版本提供了断点续传功能,允许用户中断上传后继续未完成的部分。 3. **文件大小限制**:可以设定每个文件的大小限制,防止过大文件导致服务器资源耗尽。 4. **...

    [其他类别]JSP Explorer 文件浏览器 v1.0_fileexplorer.zip

    4. **文件下载**:用户可以选择一个或多个文件进行下载,系统应提供进度显示和断点续传功能。 5. **文件上传**:允许用户上传文件到服务器,可能需要限制文件类型和大小,确保安全。 6. **文件管理**:包括新建、...

Global site tag (gtag.js) - Google Analytics