做導出功能,寫入文件時報異常,異常信息如:
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;
}