From 9c4d5814ffc818c418c7061c62a0662c8dd1511b Mon Sep 17 00:00:00 2001 From: caijia Date: Tue, 3 Sep 2019 15:44:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=98=AF=E5=90=A6=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=96=AD=E7=82=B9=E9=80=89=E9=A1=B9=EF=BC=8C=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B4=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/caijia/download/DownloadCallable.java | 11 +++++++---- .../main/java/com/caijia/download/FileDownloader.java | 11 ++++++++++- .../main/java/com/caijia/download/FileResponse.java | 10 +++++++++- 3 files changed, 26 insertions(+), 6 deletions(-) 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("\\");