java.io.IOException : Premature EOF while downloading pdf over https 异常

标签 java http io stream

尝试使用 java 下载 pdf 时出现错误。我知道有类似的问题,但没有我的问题具体。

我的代码片段:

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)

该代码几乎适用于所有情况,并且已被使用了数千次。但在极少数情况下,我会得到这个异常(exception)。但是我可以用浏览器下载pdf。另外,如果我把 pdf 放在我自己的服务器上,我可以用我的代码下载它。所以它一定与服务器提供此 pdf 的方式有关。

也许它与Transfer-Encoding:chunked有关?

有人知道我可以尝试解决这个问题吗?

最佳答案

这似乎是一个与 java 分块处理有关的错误。许多解决方法是一次读取一个字节并将读取的内容放入 EOFException 的 try-catch 中。

关于java.io.IOException : Premature EOF while downloading pdf over https 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10333257/

相关文章:

javascript - 如何从图像 URL 获取状态代码? JavaScript

c# - 在 Directory.Delete 之后,Directory.Exists 有时会返回 true 吗?

c - 用 C 写入文件时出现段错误

java - 未找到 native micronaut 数据插入查询的可能实现

java - 在 RESTful web 服务中实现注销

java - 在Java中查询不起作用,但在MySQL中它工作正常,我该如何解决这个问题?

java - p :dataList cannot iterate java. util.Set

python - 如何使用 Python 发送没有 'Host Header' 的请求?

http - 超时与服务器无响应,我如何区分它们?

python - Numpy savez 异常