在系统使用 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 的问题