diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java b/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java index dd3efc4d..e05f0aee 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java @@ -63,38 +63,50 @@ class ConnectionHelp { static HttpURLConnection setConnectParam(DownloadTaskEntity entity, HttpURLConnection conn) throws ProtocolException { conn.setRequestMethod(entity.requestEnum.name); + Set keys = null; if (entity.headers != null && entity.headers.size() > 0) { - Set keys = entity.headers.keySet(); + keys = entity.headers.keySet(); for (String key : keys) { conn.setRequestProperty(key, entity.headers.get(key)); } } - conn.setRequestProperty("Charset", "UTF-8"); - conn.setRequestProperty("User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"); - StringBuilder accept = new StringBuilder(); - accept.append("image/gif, ") - .append("image/jpeg, ") - .append("image/pjpeg, ") - .append("image/webp, ") - .append("image/*, ") - .append("application/xml") - .append("application/xaml+xml, ") - .append("application/xhtml+xml, ") - .append("application/x-shockwave-flash, ") - .append("application/x-ms-xbap, ") - .append("application/x-ms-application, ") - .append("application/msword, ") - .append("application/vnd.ms-excel, ") - .append("application/vnd.ms-xpsdocument, ") - .append("application/vnd.ms-powerpoint, ") - .append("text/plain, ") - .append("text/html, ") - .append("*/*"); - conn.setRequestProperty("Accept", accept.toString()); - conn.setRequestProperty("Accept-Encoding", "identity"); - conn.setRequestProperty("Accept-Charset", "UTF-8"); - conn.setRequestProperty("Connection", "Keep-Alive"); + if (keys == null || !keys.contains("Charset")) { + conn.setRequestProperty("Charset", "UTF-8"); + } + if (keys == null || !keys.contains("User-Agent")) { + conn.setRequestProperty("User-Agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"); + } + if (keys == null || !keys.contains("Accept")) { + StringBuilder accept = new StringBuilder(); + accept.append("image/gif, ") + .append("image/jpeg, ") + .append("image/pjpeg, ") + .append("image/webp, ") + .append("application/xml, ") + .append("application/xaml+xml, ") + .append("application/xhtml+xml, ") + .append("application/x-shockwave-flash, ") + .append("application/x-ms-xbap, ") + .append("application/x-ms-application, ") + .append("application/msword, ") + .append("application/vnd.ms-excel, ") + .append("application/vnd.ms-xpsdocument, ") + .append("application/vnd.ms-powerpoint, ") + .append("text/plain, ") + .append("text/html, ") + .append("*/*"); + conn.setRequestProperty("Accept", accept.toString()); + } + if (keys == null || !keys.contains("Accept-Encoding")) { + conn.setRequestProperty("Accept-Encoding", "identity"); + } + if (keys == null || !keys.contains("Accept-Charset")) { + conn.setRequestProperty("Accept-Charset", "UTF-8"); + } + if (keys == null || !keys.contains("Connection")) { + conn.setRequestProperty("Connection", "Keep-Alive"); + } //302获取重定向地址 conn.setInstanceFollowRedirects(false); return conn; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadUtil.java index 943294c7..2f08ba86 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadUtil.java @@ -81,7 +81,7 @@ class DownloadUtil implements IDownloadUtil, Runnable { + ".properties"); try { if (!mConfigFile.exists()) { //记录文件被删除,则重新下载 - handleNewTask(); + isNewTask = true; CommonUtil.createFile(mConfigFile.getPath()); } else { isNewTask = !mDownloadFile.exists(); @@ -295,10 +295,6 @@ class DownloadUtil implements IDownloadUtil, Runnable { return; } int fileLength = conn.getContentLength(); - if (fileLength < SUB_LEN) { - THREAD_NUM = 1; - CONSTANCE.THREAD_NUM = THREAD_NUM; - } Properties pro = createConfigFile(fileLength); int blockSize = fileLength / THREAD_NUM; int[] recordL = new int[THREAD_NUM]; @@ -325,7 +321,7 @@ class DownloadUtil implements IDownloadUtil, Runnable { recordL[rl] = i; rl++; } else { - handleNewTask(); + handleNewTask(fileLength); } if (isNewTask) { recordL[rl] = i; @@ -380,7 +376,7 @@ class DownloadUtil implements IDownloadUtil, Runnable { //分配每条线程的下载区间 pro = CommonUtil.loadConfig(mConfigFile); if (pro.isEmpty()) { - handleNewTask(); + handleNewTask(fileLength); } else { Set keys = pro.keySet(); int num = 0; @@ -390,7 +386,7 @@ class DownloadUtil implements IDownloadUtil, Runnable { } } if (num == 0) { - handleNewTask(); + handleNewTask(fileLength); return pro; } THREAD_NUM = num; @@ -400,7 +396,7 @@ class DownloadUtil implements IDownloadUtil, Runnable { if (state != null && Integer.parseInt(state + "") == 1) { continue; } - handleNewTask(); + handleNewTask(fileLength); return pro; } } @@ -412,9 +408,10 @@ class DownloadUtil implements IDownloadUtil, Runnable { /** * 处理新任务 */ - private void handleNewTask() { + private void handleNewTask(long fileLength) { isNewTask = true; - THREAD_NUM = AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum(); + THREAD_NUM = fileLength < SUB_LEN ? 1 + : AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum(); } /** diff --git a/app/src/main/assets/aria_config.xml b/app/src/main/assets/aria_config.xml index 022b9800..f9ed36f3 100644 --- a/app/src/main/assets/aria_config.xml +++ b/app/src/main/assets/aria_config.xml @@ -4,7 +4,7 @@ - + diff --git a/app/src/main/java/com/arialyy/simple/test/TestMutilTaskSysDownload.java b/app/src/main/java/com/arialyy/simple/test/TestMutilTaskSysDownload.java index 383536be..71b235e5 100644 --- a/app/src/main/java/com/arialyy/simple/test/TestMutilTaskSysDownload.java +++ b/app/src/main/java/com/arialyy/simple/test/TestMutilTaskSysDownload.java @@ -56,14 +56,17 @@ public class TestMutilTaskSysDownload extends BaseActivity