/// <summary> /// 重试下载 /// <param name="ID">任务ID</param> /// </summary> public void ReDownload(int ID) { if (SubTasks.ContainsKey(ID)) { if (SubTasks[ID].State != TaskState.载完成) { HttpDownload download = new HttpDownload { ID = ID, DownLoadUrl = SubTasks[ID].DownLoadUrl, FileName = SubTasks[ID].FileName, FilePath = SubTasks[ID].FilePath, ThreadNum = 10, From = SubTasks[ID].From, To = SubTasks[ID].To }; SubTasks[ID].StopDownload(); download.Start(); download.TaskCompletedEvent += TaskCompletedEvent; SubTasks[ID] = download; } } }
public override void Start() { if (!(FilePath != null && FileName != null && SubTaskNum != 0)) { return; } State = TaskState.加速下载中; try { HttpWebRequest httpWebRequest = WebRequest.Create($"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path=" + Uri.EscapeDataString($"{Info.path}")) as HttpWebRequest; HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; ContentLength = httpWebResponse.ContentLength; long q = ContentLength / SubTaskNum; for (int i = 0; i < SubTaskNum; i++) { if (i == (SubTaskNum - 1)) { var LastSubTask = new HttpDownload { ID = i, DownLoadUrl = $"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path=" + Uri.EscapeDataString($"{Info.path}"), FilePath = FilePath, FileName = FileName + ".tmp" + i.ToString(), ThreadNum = 12, From = q * i, To = ContentLength }; LastSubTask.Start(); LastSubTask.TaskCompletedEvent += TaskCompletedEvent; SubTasks.Add(i, LastSubTask); break; } var SubTask = new HttpDownload { ID = i, DownLoadUrl = $"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path=" + Uri.EscapeDataString($"{Info.path}"), FilePath = FilePath, FileName = FileName + ".tmp" + i.ToString(), ThreadNum = 12, From = q * i, To = (q * (i + 1)) - 1 }; SubTask.Start(); SubTask.TaskCompletedEvent += TaskCompletedEvent; SubTasks.Add(i, SubTask); } } catch (Exception ex) { if (ex is WebException) { //404 ERROR if (ex.Message.Contains("404")) { MessageBox.Show("下载失败! 文件名有非法字符,请使用云管家重命名后再下载"); return; } //403 ERROR if (ex.Message.Contains("403")) { MessageBox.Show("下载失败! 百度抽风了,你可以换个账号或者等几天再下载\r\nPS:一般来说等一天就好"); return; } } MessageBox.Show("下载时遇到未知错误: " + ex.Message + "\r\n请联系作者"); } }