public void save(File file, HttpFetcherListener listener) throws IOException { HttpHost httpHost = new HttpHost(uri.getHost(), uri.getPort()); HttpGet httpGet = new HttpGet(uri); httpGet.addHeader("Connection", "close"); HttpParams params = httpGet.getParams(); HttpConnectionParams.setConnectionTimeout(params, timeout); HttpConnectionParams.setSoTimeout(params, timeout); HttpConnectionParams.setStaleCheckingEnabled(params, true); HttpConnectionParams.setTcpNoDelay(params, true); HttpClientParams.setRedirecting(params, true); HttpProtocolParams.setUseExpectContinue(params, false); HttpProtocolParams.setUserAgent(params, userAgent); FileOutputStream out = null; int statusCode = -1; Map<String, String> headers = null; try { out = new FileOutputStream(file); HttpResponse response = DEFAULT_HTTP_CLIENT.execute(httpHost, httpGet); statusCode = response.getStatusLine().getStatusCode(); headers = mapHeaders(response.headerIterator()); if (statusCode < 200 || statusCode >= 300) { throw new IOException("bad status code, downloading file " + statusCode); } if (response.getEntity() != null) { writeEntity(response.getEntity(), out, listener); } if (listener != null) { listener.onSuccess(new byte[0]); } } catch (Throwable e) { if (listener != null) { listener.onError(e, statusCode, headers); } Log.e(TAG, "Error downloading from: " + uri + ", e: " + e.getMessage()); } finally { IOUtils.closeQuietly(out); } }
private static void writeEntity( final HttpEntity entity, OutputStream out, HttpFetcherListener listener) throws IOException { if (entity == null) { throw new IllegalArgumentException("HTTP entity may not be null"); } InputStream in = entity.getContent(); if (in == null) { return; } int i = (int) entity.getContentLength(); if (i < 0) { i = 4096; } try { byte[] data = new byte[4096]; int n; while ((n = in.read(data)) != -1) { if (listener != null) { listener.onData(data, n); } out.write(data, 0, n); out.flush(); } } finally { in.close(); } }