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. Qt for Android (Alpha) 发布
  2. java下拉框及响应函数_Java 下拉框JComboBox和单选按钮JRadioButton简单举例使用 | 学步园...
  3. rxjs里subscribe和tap的区别
  4. 40个Java Collections面试问答
  5. j2ee中的2什么意思
  6. 泛微oa部署linux步骤,泛微OA流程搭建操作流程
  7. webQQ协议分析2018.11.9
  8. 大学excel题库含答案_2017excel试题库附答案.doc
  9. 全行业产业链图示(摘自企查查)
  10. mysql group by作用_group by实现原理及其作用
  11. 网红书店的“关门潮”与场景阅读的“科技浪”
  12. poi 启用保护后取消_ie11启用增强保护模式开启关闭方法
  13. SQL Server 2008 问题——已成功与服务器建立连接,但是在登录过程中发生错误。
  14. 计算机均价的公式,【转】二手笔记本电脑的价格计算方法和举例
  15. win32获取本地ip
  16. 俄罗斯公司开发者提交开源代码被拒,Linux 内核维护者: 我们不愿意接受
  17. [译] 项目什么时候需要 React 框架呢?
  18. OpenCV4学习笔记(76)——基于ArUco模块+QT实现增强现实(AR)
  19. 【HTML】HTML网页设计---海贼王网页前端设计
  20. 用C++制作跳棋游戏,模式任你选,怂了算我输!

热门文章

  1. 跨域问题(什么是跨域问题、如何解决)
  2. java http 302_java中httpclent以post方式提交请求时,http返回码是302重定向时,不自动跳转的处理...
  3. sphider+scws
  4. 双笔记本自带蓝牙的串口通讯
  5. SuperMap iDesktop 点数据集外挂生成缓存详解
  6. SH367309 BMS 锂电池保护板方案 电池管理系统
  7. 818那些别具匠心的广告
  8. 给大家发女朋友了!!
  9. 当ASRock 华擎 Deskmini 110 STX 装Intel 英特尔 i3 8100
  10. 3DMax给模型贴纹理图片