diff --git a/download/src/main/java/com/caijia/download/DownloadCallable.java b/download/src/main/java/com/caijia/download/DownloadCallable.java index 6a39237..59b567d 100644 --- a/download/src/main/java/com/caijia/download/DownloadCallable.java +++ b/download/src/main/java/com/caijia/download/DownloadCallable.java @@ -67,8 +67,9 @@ public static String stateToString(int state) { @Override public CallableResult call() { Utils.log(debug, threadIndex, "running"); - long previousDownloadLength = breakPointManager.getDownloadLength(threadIndex,threadCount, - saveFileDir.getAbsolutePath(), fileRequest); + long previousDownloadLength = breakPointManager != null ? + breakPointManager.getDownloadLength(threadIndex,threadCount, + saveFileDir.getAbsolutePath(), fileRequest) : 0; Utils.log(debug, threadIndex, "previous download length = " + previousDownloadLength); currentPosition = startPosition + previousDownloadLength; @@ -141,8 +142,10 @@ private int writeData(InputStream inStream) { while (!exit && (len = inStream.read(buffer)) != -1) { partFile.write(buffer, 0, len); downloadSize += len; - breakPointManager.saveDownloadLength(threadIndex, threadCount, downloadSize, - saveFileDir.getAbsolutePath(), fileRequest); + if (breakPointManager != null) { + breakPointManager.saveDownloadLength(threadIndex, threadCount, downloadSize, + saveFileDir.getAbsolutePath(), fileRequest); + } if (downloadProgressListener != null) { downloadProgressListener.downloadProgress(threadIndex, len, fileSize); diff --git a/download/src/main/java/com/caijia/download/FileDownloader.java b/download/src/main/java/com/caijia/download/FileDownloader.java index 208a366..160c458 100644 --- a/download/src/main/java/com/caijia/download/FileDownloader.java +++ b/download/src/main/java/com/caijia/download/FileDownloader.java @@ -21,6 +21,7 @@ public class FileDownloader { private FileRequest fileRequest; private String saveFileDirPath; private Schedule schedule; + private boolean supportBreakPoint; private List downloadCallableList; private List downloadTasks; private BreakPointManager breakPointManager; @@ -47,6 +48,7 @@ private FileDownloader(Builder builder) { this.threadCount = builder.threadCount; this.saveFileDirPath = builder.saveFileDirPath; this.breakPointManager = builder.breakPointManager; + this.supportBreakPoint = builder.supportBreakPoint; this.fileRequest = builder.fileRequest; this.schedule = builder.schedule; this.intervalDownload = builder.intervalDownload; @@ -54,7 +56,7 @@ private FileDownloader(Builder builder) { this.connection = new OkHttpConnection(); } - if (this.breakPointManager == null) { + if (supportBreakPoint && this.breakPointManager == null) { this.breakPointManager = new FileBreakPointManager(); } @@ -380,11 +382,18 @@ public static class Builder { private int maxThreadCount; + private boolean supportBreakPoint; + public Builder connection(Connection connection) { this.connection = connection; return this; } + public Builder supportBreakPoint(boolean supportBreakPoint) { + this.supportBreakPoint = supportBreakPoint; + return this; + } + public Builder maxThreadCount(int maxThreadCount) { this.maxThreadCount = maxThreadCount; return this; diff --git a/download/src/main/java/com/caijia/download/FileResponse.java b/download/src/main/java/com/caijia/download/FileResponse.java index fdac5aa..7ee23bf 100644 --- a/download/src/main/java/com/caijia/download/FileResponse.java +++ b/download/src/main/java/com/caijia/download/FileResponse.java @@ -1,6 +1,8 @@ package com.caijia.download; import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.List; import java.util.Map; import java.util.regex.Matcher; @@ -58,7 +60,13 @@ public String getFileName() { String disposition = Utils.getHeader("Content-Disposition", headers); if (!Utils.isEmpty(disposition)) { Matcher m = Pattern.compile(".*filename=(.*)").matcher(disposition.toLowerCase()); - if (m.find()) return m.group(1); + if (m.find()) { + try { + return URLDecoder.decode(m.group(1), "utf-8"); + } catch (Exception e) { + return m.group(1); + } + } } else { int pathIndex = realDownloadUrl.lastIndexOf("\\");