2019独角兽企业重金招聘Python工程师标准>>>

javax.servlet.ServletException: ClientAbortException:  java.net.SocketException: Broken pipe错误完美解决

现在百度太垃圾了,啥都搜不出来,啥时候才能上google,简直成一个梦想了

用chrome跟踪发现下载文件时出现如下错误:

错误 349 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):我们收到了多个“Content-Disposition”标头。我们不允许此行为,以防遭到 HTTP 响应拆分攻击。

原代码为:

public String downloadFile() throws Exception {
  HttpServletResponse response = ServletActionContext.getResponse();
  HttpSession session = HttpRequester.getHttpSession();
  Object su = session.getAttribute("ACCOUNT");
  if (su == null) {
   System.out.println("session超时");
   throw new Exception("session超时");
  }
  taskResultExcel = downloadFile.substring(downloadFile.lastIndexOf("/")+1, downloadFile.length());
  response.setContentType("application/vnd.ms-excel");
  response.setHeader("Content-Disposition", "attachment;filename=\""+ taskResultExcel + "\"");
  response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
  response.setHeader("Pragma", "public");
  return SUCCESS;
 }

修改为如下代码即可解决

Caused by: ClientAbortException:  java.net.SocketException: Broken pipe

public String download() {
  HttpServletResponse response = getResponse();
  String flag = SUCCESS;
  log.info("下载的文件为: " + downloadFile);
        try {
            String filePath2 = ServletActionContext.getServletContext().getRealPath("/"); //取当前系统路径
            // path是指欲下载的文件的路径。在path 路径下创建名为
//            File file = new File(filePath2 + "zjh/下载.xls");
            File file = new File(filePath2 + downloadFile);
            if (!file.exists()){
             log.info("文件没有找到:" + downloadFile);
                flag = null;
            }
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

// 以流的形式下载文件。
//            InputStream fis = new BufferedInputStream(new FileInputStream(filePath2 + "zjh/下载.xls"));
            InputStream fis = new BufferedInputStream(new FileInputStream(new File(filePath2 + downloadFile)));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            taskResultExcel = downloadFile.substring(downloadFile.lastIndexOf("/")+1, downloadFile.length());
            log.info("页面文件为: " + taskResultExcel);
            response.reset();
            response.addHeader("Content-Disposition", "attachment;filename="+ java.net.URLEncoder.encode(taskResultExcel,"utf-8"));
            response.addHeader("Content-Length", "" + file.length());

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            log.info("下载文件出现异常" + ex.getMessage());
            flag = null;
        }
        //        return response;
        return flag;
    }

转载于:https://my.oschina.net/nixuewen/blog/348110

java.net.SocketException: Broken pipe问题解决相关推荐

  1. java broken pipe_java.net.SocketException: Broken pipe问题解决

    javax.servlet.ServletException: ClientAbortException:  java.net.SocketException: Broken pipe错误完美解决 现 ...

  2. JedisConnectionException: java.net.SocketException: Broken pipe (Write failed)

    JedisConnectionException: java.net.SocketException: Broken pipe (Write failed) 问题: 查看线上的日志发现线上出现大量的如 ...

  3. JedisConnectionException: java.net.SocketException: Broken pipe

    问题:redis一台,内存15g,32个现成共同操作redis!数据量160w,报出:JedisConnectionException: java.net.SocketException: Broke ...

  4. java.io.IOException: Broken pipe 的异常处理

    断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...

  5. 断开的管道 java.io.IOException: Broken pipe 解决方法

    断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...

  6. Java中 java.io.IOException: Broken pipe

    认识broken pipe pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据. 当该管道从另一端突然关闭时,会发生数据突然中断,即是broken. 对于文件File来说,这可 ...

  7. java.io.IOException: Broken pipe 线上问题记录

    今天在上线前staging环境验证时遇到这样一个问题java.io.IOException: Broken pipe,操作服务刚起来之后,测试人员第一次进行更配[post]操作,结果操作失败,但是第二 ...

  8. ClientAbortException: java.io.IOException: Broken pipe 解决

    ClientAbortException: java.io.IOException: Broken pipe 解决 参考:https://www.jianshu.com/p/d7f5de27fec5 ...

  9. 页面文件太小,无法解决/BrokenPipeError: [Errno 32] Broken pipe问题解决

    跑模型的日子就是天天.天天地改bug,bug天天对我说"爱你",我只想让它滚出地球呜呜呜呜呜呜.为了表达我对它们的"爱意",我一定要把这几天的辛酸泪记录下来! ...

最新文章

  1. Oracle 系统表大全
  2. 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...
  3. Spring Cloud【Finchley】- 21 Spring Cloud Stream 构建消息驱动微服务
  4. 让PHP程序永远在后台运行
  5. 开发人员工作周报_如何增加找到开发人员工作的机会
  6. “约见”面试官系列之常见面试题之第一百零五篇之v-if与v-show(建议收藏)
  7. 26.课时26.【Django模版】if标签使用详解(Av61533158,P26)
  8. 英语国家的学生学语法么?_纪念国家语法日
  9. 自定义头文件 No such file or directory
  10. 数据中心操作人员:艰难地在针对VM构建的基础设施上运行容器
  11. 第六课:GNN的可解释性
  12. Python中字符串反转的一个简单操作
  13. Python vs Matlab—— find 与 np.where
  14. View绘制详解(四),谝一谝layout过程
  15. 下拉框系统甄选火星推荐_微博下拉框技术选择5火星
  16. NFL计划将数据跟踪芯片放入橄榄球中
  17. android移动应用开发答案,Android移动应用开发习题答案.pdf
  18. 信息学奥赛一本通(c++):2066:【例2.3】买图书
  19. oracle如何查询字段中是英文名称,如投保人是外国人
  20. 快手分身多开黑屏脚本

热门文章

  1. 设计模式:抽象工厂模式(C++)【工厂方法升级】
  2. PySpider问题记录http599
  3. Mysql批量更新的三种方式
  4. Python学习day2 while循环格式化输出运算符
  5. NumPy 基础用法
  6. redmine测试使用小结
  7. Codeforces632E Thief in a Shop(NTT + 快速幂)
  8. 图书管理模块功能设计
  9. F2812 DSP程序运行在片内RAM和FLASH的区别
  10. 在Centos 6.5 X64下切割m3u8