从服务器响应写入(下载)文件时如何忽略内容长度异常?
How to Ignore the content-length exception while writing (downloading) a file from server response?
我正在向我无法控制的服务器发出请求。它 returns 一个可下载的响应。我在客户端下载文件如下
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)
Premature end of Content-Length delimited message body (expected:
我查看了 above SO 问题,但该问题及其答案解决了一个严重的错误,即服务器未提供其承诺的内容。另外,我不会在下载文件完成之前关闭客户端。
在我的例子中,文件(zip 文件)是完美的,只是大小的估计值有一小部分偏差。
已将此报告给服务器维护人员,但我想知道是否有办法忽略此异常。假设下载文件的检查是自己完成的。
假设文件是完整的,您可以简单地捕获异常,刷新流的其余部分,关闭它,并且文件应该按照服务器给出的完整写入。当然,如果文件 是 仅部分完成,那么您将无法在任何情况下以 zip 文件形式打开该文件,因此请确保文件正确无误正在发送,这只是内容长度的问题。
我正在向我无法控制的服务器发出请求。它 returns 一个可下载的响应。我在客户端下载文件如下
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)
Premature end of Content-Length delimited message body (expected:
我查看了 above SO 问题,但该问题及其答案解决了一个严重的错误,即服务器未提供其承诺的内容。另外,我不会在下载文件完成之前关闭客户端。
在我的例子中,文件(zip 文件)是完美的,只是大小的估计值有一小部分偏差。
已将此报告给服务器维护人员,但我想知道是否有办法忽略此异常。假设下载文件的检查是自己完成的。
假设文件是完整的,您可以简单地捕获异常,刷新流的其余部分,关闭它,并且文件应该按照服务器给出的完整写入。当然,如果文件 是 仅部分完成,那么您将无法在任何情况下以 zip 文件形式打开该文件,因此请确保文件正确无误正在发送,这只是内容长度的问题。