如何指定最大下载大小?

时间:2012-04-11 11:13:22

标签: java httpclient

除了最大重定向,以及如何为Httpclient指定URL的最大下载大小?

3 个答案:

答案 0 :(得分:2)

AFAIK没有HTTP标头告诉服务器最大响应大小。您可以查看响应的Content-Length,如果响应太大,请立即返回。如果未指定(它甚至可以在服务器端未知),您唯一的选择是开始下载它。不用担心:当您致电HttpClient.execute().getEntity()时,内容并未完全下载HttpEntity可以进行流式传输和缓冲,这意味着只要您拨打execute()

,它就不会完全保存在内存中或保存在磁盘上

You can explore the sources yourself

答案 1 :(得分:1)

如果你没有得到Content-Length,那么这是可选的;您必须将资源作为流下载并跟踪您自己手动下载的字节数。这就是HTTP的工作方式。

答案 2 :(得分:1)

根据Jarrod的回答,这就是我最终解决问题的方法:

HttpGet request = new HttpGet();
request.setURI(new URI(url));
response = client.execute(request);
BufferedReader in;

in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";

char buffer[] = new char[1024];

int totalReadSize = 0, currentRead=0;
while ((currentRead = in.read(buffer,0,buffer.length)) != -1)
{
    totalReadSize += currentRead;
    line = new String(buffer);
    sb.append(line);
    if (totalReadSize > MAX_DOWNLOAD_SIZE)
    {
        client.getConnectionManager().shutdown();
        throw new Exception("File too large");
    }
}