jsp如何实现大文件(1G左右)的下载?
jsp实现文件从服务器上下载,使用的是常用的response的流下载方式,文件是一个压缩好了zip包。
由于文件比较大,有的达到了1、2个G,文件在下载中,常常下载未完成就结束了,压缩包看起来好的,但是打开就是损坏的,大小也比较小。
后台出错日志为:
ClientAbortException java.io.IOException
at org.apache.catalina.connector.OutuputBuffer.realWriteBytes<OutputBuffer.java:358>
at org.apacle.tomcat.util.buf.ByteChunk.flushBuffer<ByteChunk.java:349>
at org.apacle.catalina.connector.OutputBuffer.writeBytes<OutputBuffer.java:381>
我测试了在不同的电脑小下载,情况会不一样。有的电脑可以下载的大小会大些,有的会小些,但都下载不完整。另,在服务器电脑上有时可以直接完全下载,有时也下不完。我感觉与电脑的性能也有关系。
我使用我自己的tomcat运行的程序,在下载时常常下到一定程序明显不动了,过好久又能下载一点,再过一会出错,图片如下:
我的代码:
我的工程分两个应用,web服务器和文件服务器,页面调用web服务器的servlet,web服务器再调用文件服务器的servlet
web服务器代码:
文件服务器代码:
由于文件比较大,有的达到了1、2个G,文件在下载中,常常下载未完成就结束了,压缩包看起来好的,但是打开就是损坏的,大小也比较小。
后台出错日志为:
ClientAbortException java.io.IOException
at org.apache.catalina.connector.OutuputBuffer.realWriteBytes<OutputBuffer.java:358>
at org.apacle.tomcat.util.buf.ByteChunk.flushBuffer<ByteChunk.java:349>
at org.apacle.catalina.connector.OutputBuffer.writeBytes<OutputBuffer.java:381>
我测试了在不同的电脑小下载,情况会不一样。有的电脑可以下载的大小会大些,有的会小些,但都下载不完整。另,在服务器电脑上有时可以直接完全下载,有时也下不完。我感觉与电脑的性能也有关系。
我使用我自己的tomcat运行的程序,在下载时常常下到一定程序明显不动了,过好久又能下载一点,再过一会出错,图片如下:
我的代码:
我的工程分两个应用,web服务器和文件服务器,页面调用web服务器的servlet,web服务器再调用文件服务器的servlet
web服务器代码:
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(conn !=null){
try{
conn.setConnectTimeout(60000); //连接超时时间:单位毫秒
conn.setReadTimeout(300000); //读取数据超时时间:单位毫秒
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("patternCommand", patternCommand);
conn.setRequestProperty("ftpPath", ftpPath);
is = conn.getInputStream();
byte[] buffer = new byte[2048];
int count = 0;
try {
while (true) {
int bytesReceived = is.read(buffer);
response.setHeader("Content-Disposition", "filename="+ shortName);
response.setHeader("Connection", "Keep-Alive");
response.setContentType("application/octet-stream");
out = response.getOutputStream();
}
if (bytesReceived < 1) {
break;
}
out.write(buffer, 0, bytesReceived);
out.flush();
count++;
}
} finally {
if(out!=null)out.close();
if(is!=null)is.close();
}
}finally{
if(conn!=null)conn.disconnect();
}
文件服务器代码:
OutputStream os = null;
FileInputStream fis = null;
try {
if(StringUtils.isNotEmpty(outPutPath)){
File file = new File(outPutPath);
os = response.getOutputStream();
fis = FileUtils.openInputStream(file);
byte[] buffer = new byte[2048];
try {
while (true) {
int bytesReceived = fis.read(buffer);
if (bytesReceived < 1) {
break;
}
os.write(buffer, 0, bytesReceived);
os.flush();
}
} finally {
if(os!=null)os.close();
if(fis!=null)fis.close();
}
}
} catch (IOException e) {
log.error(e.getMessage());
e.printStackTrace();
}
...全文
相关推荐
JSP页面编辑器,可实现像Word一样编辑页面
JSP页面编辑器,可实现像Word一样编辑页面。
网上书店的设计与实现 JSP+Oracle 11g MVC模式
基于JSP,使用Oracle 11g数据库,采用MVC模式精心编写,内含完整的前台后台系统,并有数据库设计、详细设计、用户手册文档。
G.A.N.G JSP留言本 1.0
JSP/JavaBean开发的一套留言本系统<br>默认的管理员:admin<br>管理员密码:admin <br>
Jsp连接Oracle 10G
NULL 博文链接:https://robinsoncrusoe.iteye.com/blog/824513
分页struts2+jsp+oracle10G
质量保证,逻辑代码全部手写,部分使用MyEclipse8.5生成,没有复制其他地方的代码,初级学习分页的好例子,代码中有注释!


Web 开发
