1.需求场景
服务器后台报错,堆栈信息如下:
org.apache.catalina.connector.ClientAbortException: java.io.IOException
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:407)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:371)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:432)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:420)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91)
at jxl.write.biff.CompoundFile.writeExcelData(CompoundFile.java:249)
at jxl.write.biff.CompoundFile.write(CompoundFile.java:233)
.......
2.项目环境
struts2 spring2.5 hibernate3
3.解决方案
(1)针对用户中途取消下载,struts2做如下配置(导入struts2-sunspoter-stream-1.0.jar)
<package name="default" namespace="/" extends="struts-default">
<!-- 添加如下内容 -->
<result-types>
<result-type
name="streamx" class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX"/>
</result-types>
<action name="download" class="com.DownloadFileAction">
<!-- type改写 -->
<result name="success" type="streamx">
<param name="inputName">download</param>
<param name="bufferSize">4096</param>
<param name="contentDisposition">filename=""</param>
<param name="contentCharSet">UTF-8</param>
</result>
</action>
</package>
(2)针对用户用户网络环境不稳定,文件下载期间网络中断,服务器端会捕获因客户端网络中断而发生的异常信息,不影响程序正常运行,可忽视,或者将该异常做特殊处理(捕获,不输出,或者输出warn info 日志提示)。
引用:
https://haige18.iteye.com/blog/1501539
https://blog.youkuaiyun.com/smile_life_/article/details/52875203