Пример #1
0
        //private string _errmsg = "";
        //private string _output = "";

        public string FullPage(string url)
        {
            _raisedError = 0;
            //_errmsg = "";
            //_output = "";
            var dir = S.Server.MapPath("Content/screenshots/");

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
            if (url.Contains("://"))
            {
                var md5 = MD5.Create();

                //create md5 hash from unique URL (after removing protocol from URL)
                var id       = url.Split("://", 2)[1].Replace(".", "").Replace("/", "_");
                var hash     = S.Util.Str.CreateMD5(id);
                var filepart = hash.Substring(1, 12);
                var ext      = ".jpg";
                var filename = filepart + ext;

                var i = 0;
                while (i++ <= 2) //try generating screenshot 2 times maximum or fail trying
                {
                    var process = new Process()
                    {
                        StartInfo = new ProcessStartInfo
                        {
                            FileName  = (string)S.Server.Cache["nodejs"], //get nodejs cli command name from config file
                            Arguments = S.Server.MapPath("chrome.js") + " --url=\"" + url + "\" --full --format=\"jpg\" --filename=\"" + filename + "\"",
                            RedirectStandardOutput = true,
                            RedirectStandardError  = true,
                            UseShellExecute        = false,
                            CreateNoWindow         = true,
                            WorkingDirectory       = dir
                        }
                    };

                    process.OutputDataReceived += OutputDataHandler;
                    process.ErrorDataReceived  += FullPageErrorDataHandler;
                    process.Start();
                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();
                    process.WaitForExit();

                    //check if file exists
                    if (File.Exists(dir + filename))
                    {
                        //resize image
                        var images       = new Utility.Images(S);
                        var image        = images.Load(dir + filename);
                        var outputfolder = S.Server.MapPath("/wwwroot/content/screenshots/");
                        if (!Directory.Exists(outputfolder))
                        {
                            Directory.CreateDirectory(outputfolder);
                        }
                        images.GenerateThumbnails(image, outputfolder);
                        break;
                    }

                    //check for raised errors
                    if (_raisedError > 0)
                    {
                        switch (_raisedError)
                        {
                        case 1:
                            //return Error("Cannot connect to headless Chrome browser server");
                            //try to restart headless Chrome browser server
                            StartHeadlessChromeServer();
                            break;
                        }
                    }
                    if (i == 2)
                    {
                        return(Error());
                    }
                    Thread.Sleep(1000);
                }
                return(filename + "|" + id);
            }
            return(Error());
        }
Пример #2
0
        public WebRequest Upload()
        {
            WebRequest wr = new WebRequest();

            if (Files.Count > 0)
            {
                string folder = R.Request.Query["folder"];
                if (folder == null)
                {
                    folder = "";
                }
                if (folder != "")
                {
                    folder += "/";
                }
                string path = "/wwwroot/content/websites/" + R.Page.websiteId + "/photos/" + folder;
                folder = folder.Replace("/", "");
                string               ext = ""; string name = ""; string filename = ""; string filenew = ""; bool generated = false;
                Utility.Images       image   = new Utility.Images(R);
                SqlClasses.Dashboard sqlDash = new SqlClasses.Dashboard(R);

                foreach (IFormFile file in Files)
                {
                    filename = R.Util.Str.replaceAll(ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'), "",
                                                     new string[] { "-", "_", "!", "@", "#", "$", "%", "&", "*", "+", "=", ",", "?" });

                    name      = R.Util.Str.CreateID(7).ToLower();
                    ext       = R.Util.Str.getFileExtension(filename).ToLower();
                    generated = false;

                    switch (ext)
                    {
                    case "jpg":
                    case "jpeg":
                    case "png":
                    case "gif":
                        if (!Directory.Exists(R.Server.MapPath(path)))
                        {
                            //create directory
                            Directory.CreateDirectory(R.Server.MapPath(path));
                        }

                        //save original photo to disk
                        filenew = name + "." + ext;
                        file.SaveAs(R.Server.MapPath(path + filenew));

                        if (ext != "gif")
                        {
                            // create 7 image sizes: [original (max 4096)], xl (1920), lg (800), med (400), sm (200), tiny (100), icon (50)
                            try
                            {
                                image.GeneratePhotos(path, filenew);
                                generated = true;
                            }
                            catch (Exception ex)
                            {
                                R.Page.RegisterJS("err", "alert('Error: " + ex.Message.Replace("'", "\\'") + ");");
                            }
                        }
                        else
                        {
                            generated = true;
                        }

                        if (generated == true)
                        {
                            //get photo dimensions
                            Utility.structImage photo = image.Load(path, filenew);

                            //save photo to database
                            sqlDash.AddPhoto(R.Page.websiteId, folder, filenew, filename, photo.width, photo.height);
                        }
                        break;
                    }
                }
            }
            return(wr);
        }
Пример #3
0
        public WebRequest Upload()
        {
            WebRequest wr = new WebRequest();
            if(Files.Count > 0)
            {
                string folder = R.Request.Query["folder"];
                if (folder == null) { folder = ""; }
                if(folder != "") { folder += "/"; }
                string path = "/wwwroot/content/websites/" + R.Page.websiteId + "/photos/" + folder;
                folder = folder.Replace("/", "");
                string ext = ""; string name = ""; string filename = ""; string filenew = ""; bool generated = false;
                Utility.Images image = new Utility.Images(R);
                SqlClasses.Dashboard sqlDash = new SqlClasses.Dashboard(R);

                foreach (IFormFile file in Files)
                {
                    filename = R.Util.Str.replaceAll(ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'), "",
                        new string[] { "-", "_", "!", "@", "#", "$", "%", "&", "*", "+", "=", ",", "?" });

                    name = R.Util.Str.CreateID(7).ToLower();
                    ext = R.Util.Str.getFileExtension(filename).ToLower();
                    generated = false;

                    switch (ext)
                    {
                        case "jpg": case "jpeg": case "png": case "gif":
                            if (!Directory.Exists(R.Server.MapPath(path))) {
                                //create directory
                                Directory.CreateDirectory(R.Server.MapPath(path));
                            }

                            //save original photo to disk
                            filenew = name + "." + ext;
                            file.SaveAs(R.Server.MapPath(path + filenew));

                            if(ext != "gif") {
                                // create 7 image sizes: [original (max 4096)], xl (1920), lg (800), med (400), sm (200), tiny (100), icon (50)
                                try
                                {
                                    image.GeneratePhotos(path, filenew);
                                    generated = true;
                                }
                                catch (Exception ex)
                                {
                                    R.Page.RegisterJS("err", "alert('Error: " + ex.Message.Replace("'", "\\'") + ");");
                                }

                            }else { generated = true; }

                            if(generated == true)
                            {
                                //get photo dimensions
                                Utility.structImage photo = image.Load(path, filenew);

                                //save photo to database
                                sqlDash.AddPhoto(R.Page.websiteId, folder, filenew, filename, photo.width, photo.height);
                            }
                            break;
                    }

                }
            }
            return wr;
        }