Example #1
0
 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 + '/');
 }
Example #2
0
        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>");
            }
        }
Example #3
0
        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();
            }
        }
Example #4
0
        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();
                }
            }
        }
Example #5
0
        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());
        }