1

내 폴더 디렉토리에서 파일을 읽는 동안 브로큰 파이프 예외가 발생했습니다. IOUtils.copy (inputStream을,의 OutputStream)에서의 InputStream과 OutputStream에를 복사하는 동안Java에서 브로큰 파이프를 해결하는 방법은 무엇입니까?

FileInputStream inputStream = new FileInputStream(file); 
ServletOutputStream outputStream = response.getOutputStream();   
IOUtils.copy(inputStream, outputStream); 
IOUtils.closeQuietly(inputStream); 
IOUtils.closeQuietly(outputStream); 

깨진 파이프가 발생 ... 내 다음 코드를 통해 이동하십시오;

브로큰 파이프를 어떻게 해결할 수 있습니까? PipedInputStream을 사용할 수 있습니까? 이 예외를 처리하는 적절한 방법입니다.

답변

1

피어에 의해 이미 닫힌 연결에 쓰는 것이 원인입니다.

이 경우 피어는 웹 브라우저 또는 웹 클라이언트 응용 프로그램입니다.

전자 메일 인 경우 수행 할 수있는 작업이 없습니다. 사용자는 언제든지 다운로드를 취소 할 수 있습니다. 그러면 파이프가 깨지게됩니다.

두 번째 경우에는 클라이언트 응용 프로그램이 잘못되었을 수 있습니다.

두 경우 모두 서버 코드에서 로그 할 수없고 잊어 버리는 것을 제외하고는 아무 것도 할 수 없습니다.

+0

나는 귀하의 의견을 받아들입니다 .. 그것은 맞습니다 ...하지만 클라이언트가 좋은 브라우저를 가지고 있다면이 문제를 해결하고 싶습니다 ... –

+1

나는 당신이 이해할 수 있다고 생각하지 않습니다. '클라이언트가 좋은 브라우저를 가지고 있는지'와는 아무런 관련이 없습니다. 사용자가 페이지를 탐색하거나 다운로드를 취소하면 사용자가 원하는 것입니다. 브라우저는 사용자가 더 이상 원하지 않는 것을 계속 다운로드해서는 안됩니다. 서버의 결과 : 파이프가 끊어졌습니다. 기간. – EJP