做导出功能,写入文件时报异常,异常信息如:
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
at org.apache.catalina.connector.OutputBuffer.appendByteArray(OutputBuffer.java:803)
at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:732)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:399)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:377)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at com.hh.extra.util.WriteReponseToWeb.writeByteArray2Response(WriteReponseToWeb.java:99)
Java 代码如:
InputStream is = new ByteArrayInputStream(content);
ServletOutputStream out = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
// 设置response参数,可以打开下载页面
response.reset();
response.setContentType(contentType.getValue()+";charset=utf-8");
try {
response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName).getBytes(), "iso-8859-1"));
out = response.getOutputStream();
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[content.length];
int bytesRead;
while ( -1 != ( bytesRead = bis.read(buff, 0, buff.length) )) {
bos.write(buff, 0, bytesRead);
}
} catch ( Exception e) {
e.printStackTrace();
} finally {
if (bis != null)
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
if (bos != null)
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
浏览器提示:
以上是由于nginx请求超时导致,超时时间默认是60秒,修改nginx的配置文件nginx.conf,超时时间设置为3600(即一小时),重启nginx即可,如图:
location /test/ {
proxy_pass http://localhost:8082;
proxy_read_timeout 3600;
}