java로 pdf를 다운로드하려고 할 때 오류가 발생합니다. 비슷한 질문이 있지만 내 것과 같이 구체적이지는 않습니다. java.io.IOException : https를 통해 pdf를 다운로드하는 동안 조기 EOF
내 코드 :URL url = new URL("https://.../abc.pdf");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
...
InputStream in= conn.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
byte[] buf = new byte[4096];
int bytesRead = 0;
while ((bytesRead = in.read(buf)) != -1) {
out.write(buf, 0, bytesRead);
}
THER 서버 응답 헤더 : (in.read(buf)
에서)
X-AspNet-Version:2.0.50727
Transfer-Encoding:chunked
Date:Thu 26 Apr 2012 12:07:59 GMT
Content-Disposition:attachment; filename=abc.pdf
Set-Cookie:Language=en-gb; path=/
Connection:Keep-Alive
Content-Type:application/octet-stream
Server:Microsoft-IIS/6.0
X-Powered-By:ASP.NET
Cache-Control:private
예외 :
Exception in thread "main" java.io.IOException: Premature EOF
at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:556)
at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:600)
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:687)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2959)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2953)
코드는 거의 모든 경우에 작동하고 있었다 수천 번 사용되었습니다. 그러나 매우 드문 경우에이 예외가 발생합니다. 그러나 나는 브라우저로 pdf를 다운로드 할 수있다. 또한 pdf를 내 서버에 저장하면 코드로 다운로드 할 수 있습니다. 따라서 서버가이 pdf를 제공하는 방식으로해야 할 일이 있어야합니다.
어쩌면 Transfer-Encoding:chunked
과 관련이 있습니까?
누구나 아이디어가 있습니까?이 문제를 해결하기 위해 무엇을 시도 할 수 있습니까?
버퍼 크기를 1 :'byte [] buf = new byte [1];로 설정하려고했지만 동일한 예외가 발생합니다. 나는 지금 try catch를 시도 할 것이다. – morja
예외를 무시하면 실제로 작동하지만 스트림은 여전히 완전히로드됩니다. 더 큰 버퍼를 사용합니다. 힌트를 주셔서 감사합니다! 버퍼가 1이 아닌 경우 문제가 발생할 수 있다고 생각합니까? 예외를 무시하는 것에 의지 할 수 있습니까? – morja
첫 번째 청크에서만 버그가 발생하면 (문제는 아님) 예외는 무시하십시오. 일반적으로 : 예. – Luca