jsp如何实现大文件(1G左右)的下载?

jsp实现文件从服务器上下载,使用的是常用的response的流下载方式,文件是一个压缩好了zip包。

由于文件比较大,有的达到了1、2个G,文件在下载中,常常下载未完成就结束了,压缩包看起来好的,但是打开就是损坏的,大小也比较小。

后台出错日志为:

ClientAbortException java.io.IOException

at org.apache.catalina.connector.OutuputBuffer.realWriteBytes<358>358>

at org.apacle.tomcat.util.buf.ByteChunk.flushBuffer<349>349>

at org.apacle.catalina.connector.OutputBuffer.writeBytes<381>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

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

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 大文件 下载

分享到:

------解决方案--------------------

ClientAbortException java.io.IOException

这个是由于client端终止下载而出现的异常。

1、检查网络连接是否不稳定。

2、换个浏览器试试

3、如果是IE,把项目地址设置为“受信任的站点”试试

------解决方案--------------------

测试一下是不是一分钟左右就断掉了,如果是的话就因为你设置了connection timeout导致的。

java文件下载 大文件,jsp怎么实现大文件(1G左右)的下载相关推荐

  1. jsp向服务器上传文件,jsp ftp 上传文件到服务器

    jsp ftp 上传文件到服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分 ...

  2. java文件下载用什么技术_Java中实现文件上传下载的三种解决方案(推荐)

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 Save 改进后的代码不需要for ...

  3. Web课程设计-仿当当网-增删改查-java+jsp+mysql-期末大作业

    仿当当网web课程设计-jsp+java+mysql-mvc-期末大作业 Web课程设计 一.系统简介 二.系统开发及运行环境 三.系统设计 四.系统实现 Web课程设计 这篇文章是为了记录自己在we ...

  4. java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!

    最近阿粉接到一个需求,需要从文件读取数据,然后经过业务处理之后存储到数据库中.这个需求,说实话不是很难,阿粉很快完成了第一个版本. 内存读取 第一个版本,阿粉采用内存读取的方式,所有的数据首先读读取到 ...

  5. java中mypoiexception_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...

    注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...

  6. 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射...

    内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码. file ...

  7. java rmi 文件传输_JAVA-RMI实现大文件传输

    在使用java-rmi的过程中,必然会遇到一个文件上传的问题,由于在rmi中无法传输文件流(比如rmi中的方法参数不能是FileInputStream之类的),那么我们只好选择一种折中的办法,就是先用 ...

  8. java 读取大文件内容_java读取大文件

    java一般读取文件时,将文件文内容全部加在到内存,然后读取,但是这种读取方式很明显不适合读取大文件,在进行大文件处理时,考虑到内存有限,采用分次读取的方式. java分次读取文件内容有三种方式, 1 ...

  9. java 文件下载 jsp文件_jsp文件 Java实现文件上传与下载

    通过前台选择文件,然后将资源上传到(即新建一个文件)到发布的资源文件下面, 下载就是url 到发布的资源文件,触发即可自动下载.服务器已经封装了如何下载的底层实现.(此处用的是tomcat) JSP上 ...

最新文章

  1. 报错——StackOverflowError
  2. c++ 11新特性总结_JDK1.8新特性Stream和Collectors19个常用示例总结
  3. Nvidia 安装相关文件下载地址
  4. 自定义验证控件CustomValidator
  5. 002——php字符串中的处理函数(一)
  6. apache.commons.lang.StringUtils 使用心得
  7. 计算机管理关机在哪,电脑点了关机为什么却关不了
  8. c语言模拟实现库函数strcat,【C语言】模拟实现库函数strcat函数
  9. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)
  10. 倍投计算器工具_天天基金网上实用的小工具
  11. HaaS Python 云端一体AI 车型识别功能
  12. IIS发布网站 后台接口404
  13. 四级网络工程师笔记-计算机网络(下)
  14. 【Python可视化展示】-多维数据可视化分析
  15. OMAP3630 Linux I2C总线驱动分析(2)
  16. RENIX软件RTSM基本操作_Linux——网络测试仪实操
  17. Qt Creator 中使用VLD检测内存泄漏
  18. 阿里云Docker镜像库
  19. 自定义搜狗输入法皮肤(DIY),挺好玩的。。制作全流程
  20. win7 CorelDRW9增强版补丁运行

热门文章

  1. Mac版JDK环境配置及Java多版本切换
  2. 海贼王热血航线正在连接服务器,航海王热血航线进不去怎么办 航海王热血航线进不去解决方案...
  3. 测试用例设计方法-等价类划分
  4. NDI NDI5下载连接
  5. python输入、输出函数
  6. HTML和Dreamwaver
  7. android源代码短彩信分析之包介绍
  8. 人工智能深度学习火起来的原因
  9. 按钮点击事件的实现方式---原生js
  10. e3mall商城的归纳总结3之后台商品节点、认识nginx