protected void Submit(object sender, EventArgs e) { foreach (var link in LinkBox.Text.Split(new[] { '\r', '\n' }) .Where(link => !string.IsNullOrWhiteSpace(link))) { OfflineDownloadTask.Create(link, path); } Response.Redirect("/Browse/" + path + '/'); }
protected void Page_Load(object sender, EventArgs e) { if (!Request.GetUser().OperateTasks) { Response.StatusCode = 401; return; } var url = Rbase64.Decode(Request.QueryString["Url"].UrlDecode()); var relativePath = RouteData.GetRelativePath(); if (!string.IsNullOrWhiteSpace(url)) { OfflineDownloadTask.Create(url, relativePath); } if ("True".Equals(Request.QueryString["Redirect"], StringComparison.InvariantCultureIgnoreCase)) { Response.Redirect("/Browse/" + relativePath + '/'); } else { Response.Write("<script>window.opener=null;window.close();</script>"); } }
public static void OfflineDownload(string url, string path, CookieAwareWebClient client = null) { FileStream fileStream = null; OfflineDownloadTask task = null; try { var retried = false; retry: var request = WebRequest.Create(url); var httpWebRequest = request as HttpWebRequest; if (httpWebRequest != null) { httpWebRequest.Referer = url; httpWebRequest.ReadWriteTimeout = Timeout.Infinite; if (client != null) client.ProcessRequest(request); } request.Timeout = Timeout.Infinite; var response = request.GetResponse(); if (!retried && url.StartsWith("http://goo.im", true, CultureInfo.InvariantCulture) && response.ContentType == "text/html") { retried = true; Thread.Sleep(15000); goto retry; } var stream = response.GetResponseStream(); var disposition = response.Headers["Content-Disposition"] ?? string.Empty; var pos = disposition.IndexOf("filename=", StringComparison.Ordinal); long? fileLength; if (stream.CanSeek) fileLength = stream.Length; else try { fileLength = response.ContentLength; } catch { fileLength = null; } if (fileLength < 0) fileLength = null; var fileName = (pos >= 0 ? disposition.Substring(pos + 9).Trim('"', '\'').UrlDecode() : GetFileName(url)).ToValidPath(); string mime, extension; try { mime = Helper.GetMime(response.ContentType); extension = Helper.GetDefaultExtension(mime); } catch { extension = Path.GetExtension(fileName); mime = Helper.GetDefaultExtension(extension); } if (Directory.Exists(FileHelper.GetFilePath(path))) { if (!string.IsNullOrEmpty(extension) && !fileName.EndsWith(extension, StringComparison.Ordinal)) fileName += extension; path = FileHelper.Combine(path, fileName); } task = new OfflineDownloadTask(url, path) { PID = Process.GetCurrentProcess().Id }; if (!string.IsNullOrWhiteSpace(mime)) task.Mime = mime; if (fileLength != null) task.FileLength = fileLength; task.Save(); stream.CopyTo(fileStream = File.Create(FileHelper.GetFilePath(path))); task.Finish(); } catch (Exception exc) { if (task == null) throw; task.ErrorMessage = exc.Message; task.Save(); if (client != null) throw; } finally { if (fileStream != null) fileStream.Close(); } }
public static void OfflineDownload(string url, string path, CookieAwareWebClient client = null) { FileStream fileStream = null; OfflineDownloadTask task = null; try { var retried = false; retry: var request = WebRequest.Create(url); var httpWebRequest = request as HttpWebRequest; if (httpWebRequest != null) { httpWebRequest.Referer = url; httpWebRequest.ReadWriteTimeout = Timeout.Infinite; if (client != null) { client.ProcessRequest(request); } } request.Timeout = Timeout.Infinite; var response = request.GetResponse(); if (!retried && url.StartsWith("http://goo.im", true, CultureInfo.InvariantCulture) && response.ContentType == "text/html") { retried = true; Thread.Sleep(15000); goto retry; } var stream = response.GetResponseStream(); var disposition = response.Headers["Content-Disposition"] ?? string.Empty; var pos = disposition.IndexOf("filename=", StringComparison.Ordinal); long?fileLength; if (stream.CanSeek) { fileLength = stream.Length; } else { try { fileLength = response.ContentLength; } catch { fileLength = null; } } if (fileLength < 0) { fileLength = null; } var fileName = (pos >= 0 ? disposition.Substring(pos + 9).Trim('"', '\'').UrlDecode() : GetFileName(url)).ToValidPath(); string mime, extension; try { mime = Helper.GetMime(response.ContentType); extension = Helper.GetDefaultExtension(mime); } catch { extension = Path.GetExtension(fileName); mime = Helper.GetDefaultExtension(extension); } if (Directory.Exists(FileHelper.GetFilePath(path))) { if (!string.IsNullOrEmpty(extension) && !fileName.EndsWith(extension, StringComparison.Ordinal)) { fileName += extension; } path = FileHelper.Combine(path, fileName); } task = new OfflineDownloadTask(url, path) { PID = Process.GetCurrentProcess().Id }; if (!string.IsNullOrWhiteSpace(mime)) { task.Mime = mime; } if (fileLength != null) { task.FileLength = fileLength; } task.Save(); stream.CopyTo(fileStream = File.Create(FileHelper.GetFilePath(path))); task.Finish(); } catch (Exception exc) { if (task == null) { throw; } task.ErrorMessage = exc.Message; task.Save(); if (client != null) { throw; } } finally { if (fileStream != null) { fileStream.Close(); } } }
protected void Page_Load(object sender, EventArgs e) { if (!Request.GetUser().OperateTasks) { Response.StatusCode = 401; return; } Response.Clear(); Response.ContentType = "application/xml"; var result = new XElement("result"); var path = RouteData.GetRelativePath(); try { GeneralTask task; switch (RouteData.GetRouteString("Type").ToLowerInvariant()) { case "offline": OfflineDownloadTask.Create(Rbase64.Decode(Request.QueryString["Url"]), path); break; case "ftpupload": result.SetAttributeValue("id", (task = new FtpUploadTask(path, Request.QueryString["Files"].Split('|').Select(file => file.UrlDecode()), Request.QueryString["Target"].UrlDecode()))); task.Start(); break; case "compress": new CompressTask(path, Request.QueryString["Files"].Split('|').Select(file => file.UrlDecode()), Request.QueryString["BaseFolder"].UrlDecode(), Request.QueryString["CompressionLevel"]).Start(); break; case "decompress": result.SetAttributeValue("id", (task = new DecompressTask (path, Request.QueryString["Target"].UrlDecode())).ID); task.Start(); break; case "convert": ConvertTask.Create(path, Request.QueryString["Target"].UrlDecode(), Request.QueryString["Size"].UrlDecode(), Request.QueryString["VCodec"].UrlDecode(), Request.QueryString["ACodec"].UrlDecode(), Request.QueryString["SCodec"].UrlDecode(), Request.QueryString["AudioPath"].UrlDecode(), Request.QueryString["Start"].UrlDecode(), Request.QueryString["End"].UrlDecode()).Start(); break; case "crossappcopy": result.SetAttributeValue("id", (task = new CrossAppCopyTask( Request.QueryString["Domain"].UrlDecode(), Request.QueryString["Path"].UrlDecode(), path, Request.QueryString["Password"].UrlDecode() ?? Request.GetPassword()))); task.Start(); break; case "batchmergeva": TaskHelper.StartRunner(string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}", TaskType.BatchMergeVATask, path, Request.QueryString["DeleteSource"], Request.QueryString["VideoPattern"], Request.QueryString["ResultPattern"], Request.QueryString["AudioPatterns"])); break; default: throw new FormatException("无法识别的 Type!"); } result.SetAttributeValue("status", "ok"); } catch (Exception exc) { result.SetAttributeValue("status", "error"); result.SetAttributeValue("message", exc.GetMessage()); } Response.Write(result.ToString()); }