private Result download() throws IOException { downloadExecutor.updateState(Downloading); Long contentLength = getDownload().getFile().getExpectedChecksum() != null ? getDownload().getFile().getExpectedChecksum().getContentLength() : null; log.info(format("Downloading %d bytes from %s with ETag %s", contentLength, getDownload().getUrl(), getDownload().getETag())); Get get = new Get(getDownload().getUrl()); get.setSocketTimeout(SOCKET_TIMEOUT); if (new Validator(getDownload()).isExistsTargets() && getDownload().getETag() != null) get.setIfNoneMatch(getDownload().getETag()); InputStream inputStream = get.executeAsStream(); log.info(format("Download from %s returned with status code %s and content length %d", getDownload().getUrl(), get.getStatusCode(), get.getContentLength())); if (get.isSuccessful() && inputStream != null) { if(contentLength == null) contentLength = get.getContentLength(); if (contentLength != null) getModelUpdater().expectingBytes(contentLength); new Copier(getModelUpdater()).copyAndClose(inputStream, new FileOutputStream(getDownload().getTempFile()), 0, contentLength); getDownload().setETag(get.getETag()); return new Result(true, get.getLastModified()); } return new Result(get.isSuccessful(), get.isNotModified()); }
public void run() throws IOException { Get request = new Get(getDownload().getUrl()); request.setRange(0L, RANGE_END_INDEX); if (getDownload().getETag() != null) request.setIfNoneMatch(getDownload().getETag()); InputStream inputStream = request.executeAsStream(); log.info(format("GET 0-%d for %s returned with status code %s and content length %d", RANGE_END_INDEX, getDownload().getUrl(), request.getStatusCode(), request.getContentLength())); if (request.isPartialContent()) { writePartialFile(inputStream, getDownload().getFile().getExpectedChecksum().getContentLength(), getDownload().getFile().getFile()); closeQuietly(inputStream); } else if (request.isOk()){ // HTTP Range not supported copyAndClose(inputStream, new FileOutputStream(getDownload().getFile().getFile())); setLastModified(getDownload().getFile().getFile(), request.getLastModified()); } request.release(); if (request.isNotModified()) { downloadExecutor.notModified(); } else if (request.isSuccessful()) { getDownload().setETag(request.getETag()); getDownload().getFile().setActualChecksum(extractChecksum(request)); downloadExecutor.succeeded(); } else downloadExecutor.downloadFailed(); }