[JSP]断点续传多线程链接下载! JSP/Servlet 实现
2008年04月23日 下午 05:15
-
<
%
-
/*
-
文件名可存为: 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
(
)
;
-
%
>
|
分享到:
相关推荐
我们可以在响应头中添加`Accept-Ranges`字段,表示支持分块下载,以适应迅雷的多线程下载特性。同时,确保文件大小正确返回,以便迅雷计算下载进度。 6. **安全与性能考虑**:在实际应用中,我们需要处理文件权限、...
这个项目专注于利用多线程技术实现文件的高效下载,同时支持断点续传功能,确保用户即使在网络不稳定的情况下也能顺利完成下载。接下来,我们将详细讨论相关知识点。 首先,我们来看“网络编程”。在计算机科学中,...
6. **多线程下载**:对于支持的浏览器,jspsmart组件可以开启多线程下载,提高下载速度。 在提供的压缩包文件中,我们有两个关键的JSP文件:`read.jsp`和`ReadFile.jsp`。它们可能是实现文件下载的核心代码。`read....
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...
这个组件允许开发者在JSP或Servlet中方便地实现文件上传功能,支持断点续传、多文件同时上传以及文件大小限制等特性。 在使用jspsmart时,你需要了解以下几个关键知识点: 1. **文件上传原理**:文件上传通常涉及...
它提到了"结合了流行的flash上传组件",这意味着此实例可能利用了Adobe Flash技术来提供用户界面,因为Flash曾经在支持大文件、多文件上传方面具有优势,可以提供良好的用户体验,例如进度条显示和断点续传等功能。...
【标题】"jspupload.rar_jspuplo_jspupload source_下载文件" 是一个与Java Servlet Pages (JSP)相关的上传下载组件的源代码包。这个组件,名为jspupload,是一个专门为JSP开发的工具,它允许用户在Web应用程序中...
- **断点续传**:支持下载过程中断后继续从断点处下载剩余内容。 - **多线程下载**:采用多线程技术提高下载速度。 ### 部署与配置 #### 服务器环境准备 - **安装Java环境**:确保服务器已安装JDK 8或更高版本。 ...
优化方面,可以采用多线程上传、断点续传、分块下载等技术提升用户体验。 6. **简珍珍--文件上传**:这个文件可能是项目中的一个组件或示例,具体包含的内容可能有相关的JSP页面、Servlet代码、控制器类、模型类等...
3. 多线程上传:对于大文件,可以采用分块上传的方式,利用XMLHttpRequest2的upload.onprogress事件,支持断点续传和多线程上传。 4. 错误处理:对可能出现的网络错误或服务器错误进行适当的错误提示和处理。 总结...
- **用户体验**:提供友好的上传界面,支持批量上传、断点续传等功能。 - **稳定性**:经过完善测试,保证在高并发环境下的稳定运行。 - **自定义配置**:允许开发者根据需求调整上传参数,如上传路径、文件大小...
3. **多线程下载**:通过分割文件并同时下载多个部分,可以显著提高下载速度。这种技术需要对文件分块和并发控制有深入理解。 4. **断点续传**:当下载中断后,用户能够从上次停止的地方继续下载,这需要服务器和...
此外,对于大文件下载,可能还采用了断点续传技术,允许用户中断后继续下载,提高用户体验。 5. **前端展示**:在用户界面方面,JSP页面通常结合HTML、CSS和JavaScript进行设计,提供友好的交互体验。用户可以看到...
可能还会有断点续传和下载速度限制功能,以优化用户体验。 4. **数据库设计**:为了记录文件信息,如文件名、大小、上传时间、下载次数等,系统通常会有一个数据库来存储这些数据。可能采用的关系型数据库如MySQL,...
3. **断点续传**:对于非常大的文件,控件可能还支持断点续传功能,即如果上传过程中网络中断,可以从上次中断的位置继续上传,而不是重新开始,这极大地提高了上传的可靠性。 4. **安全性**:在上传过程中,控件需...
6. **性能优化**:为了提高用户体验,系统可能实现了大文件分块传输、断点续传、多线程下载等功能,这些都能显著提升下载速度和稳定性。同时,服务器端可能有缓存策略来减轻服务器压力。 7. **错误处理和日志记录**...
`jspsmartupload`是一个基于Java Web的文件上传和下载解决方案,主要利用JSP和Servlet技术来实现。这个项目的设计目标是提供一个批量处理文件上传和下载的功能,并且将文件的相关信息存储在数据库中,以便于管理和...
2. **断点续传**:虽然不是所有版本都支持,但某些高级版本提供了断点续传功能,允许用户中断上传后继续未完成的部分。 3. **文件大小限制**:可以设定每个文件的大小限制,防止过大文件导致服务器资源耗尽。 4. **...
4. **文件下载**:用户可以选择一个或多个文件进行下载,系统应提供进度显示和断点续传功能。 5. **文件上传**:允许用户上传文件到服务器,可能需要限制文件类型和大小,确保安全。 6. **文件管理**:包括新建、...