尝试使用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);
}
疗法服务器响应头:
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
异常(在in.read(buf)
):
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];'但是会发生同样的异常。我会尝试尝试抓住现在。 – morja 2012-04-26 12:43:00
它实际上工作,如果我忽略异常,流仍然完全加载。即使有更大的缓冲区。谢谢你的提示!如果缓冲区不是1,你认为在某些情况下可能会导致问题吗?我可以依靠忽略异常吗? – morja 2012-04-26 12:50:34
如果错误仅发生在第一块(如我所想):没问题,只是忽略异常。一般来说:是的。 – Luca 2012-04-26 12:54:52