在系统使用 HttpClient 去服务器下载文件时,以 以下 代码为例,需要使用getContentLength判断content-length的长度
response = getHttpClient().execute(httpPost);
log.info("message:download请求状态, param:[status:{}]" ,response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
InputStream input = response.getEntity().getContent();
byte[] ss = ByteUtil.getBytes(input);
if (response != null && response.getEntity().getContentLength() > 0) {
InputStream inputStream = response.getEntity().getContent();
int index = 0;
byte[] bytes = new byte[2048];
while ((index = inputStream.read(bytes)) != -1) {
out.write(bytes, 0, index);
out.flush();
}
inputStream.close();
}
} else {
log.error("下载返回状态异常>>>>>>>>>>>>>>>>>>>>>>>>", response.getStatusLine().getStatusCode());
}
但是奇怪的是每次的Content-Length均为-1,原因在于header 是否 开启了Gzip压缩,一般情况下,关于任何图片文件,PDF文件,音乐文件等以及压缩过的文件都不需要做Gzip压缩处理,处理后反而内容更大,解析时间更长,这个时候Content-Length都是-1,所以需要加上
httpPost.setHeader("Accept-Encoding","identity"); 来取消Gzip压缩,Content-Length便是正常数据
更多推荐
java HttpClient 下载文件关于 content-length 为 -1 的问题
发布评论