我正在向服务器发出请求,我无法控制。它返回可下载的响应。我正在客户端中下载文件,如下所示
File backupFile = new File("Download.zip");
CloseableHttpResponse response = ...;
try(InputStream inputStream = response.getEntity().getContent()) {
try(FileOutputStream fos = new FileOutputStream(backupFile)) {
int inByte;
while((inByte = inputStream.read()) != -1) {
fos.write(inByte);
}
}
}
我收到以下异常:
Premature end of Content-Length delimited message body (expected: 548846; received: 536338
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:142)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:120)
内容长度分隔的邮件正文过早结束(预期:
我经历了上面的SO问题,但这个问题及其答案解决了一个严重的错误,即服务器没有提供它所承诺的。此外,在下载文件完成之前,我不会关闭客户端。
就我而言,文件(zip文件(是完美的,只是大小的估计值偏离了一分钟。
向服务器维护者报告了这个问题,但我想知道是否有办法忽略此异常。假设对下载文件的检查是由自己完成的。
假设文件按原样完成,您可以简单地捕获异常,刷新流的其余部分,关闭它,文件应该按照服务器给出的完整方式写入。 当然,如果文件仅部分完成,那么您将无法在任何上下文中将文件作为zip文件打开,因此请确保文件在发送时是正确的,并且只是内容长度的问题。