/// <summary> /// Послать ошибку на сервер. /// </summary> /// <param name="errorMes">Текст ошибки</param> /// <param name="additionalInfo">Дополнительная информация</param> public static bool SendErrorToServer(string errorMes, string additionalInfo) { //Выходим, если делать ничего не нужно. if (!SaveError) { return(false); } //Это для того чтобы если во время работы этого кода возникнет ошибка, не было зацикливания. SaveError = false; try { //Если чтение параметра неудачное, то ничего не делаем. var Params = new string[10]; //Получаем только при первой ошибке. if (ErrorsCount == 0) { if (Param.Load(DirectionQuery.Remote, Var.UserID, "SaveError", true, "User", out Params)) { if (!Params[0].Replace("SaveError=", "").ToBool()) { return(false); } SaveScreenshot = Params[1].Replace("SaveScreenshot=", "").ToBool(); CompressRatio = Params[2].Replace("CompressRatio=", "").ToInt(); SecBetweenSendError = Params[3].Replace("SecBetweenSendError=", "").ToInt(); } } //sys.Error.SaveError true/false: Сохранять ошибку на сервере или нет. Пример: SaveError=true //sys.Error.SaveScreenshot true/false: Сохранять текст ошибки на сервере или нет. Пример: SaveScreenshot=true //sys.Error.CompressRatio int: находится значение степени сжатия скриншота. По умолчанию формат JPEG, степень сжатия 90. Пример: CompressRatio=90 //sys.Error.SecBetweenSendError int: - количество секунд между ошибками. //sys.Error.LastDateTimeSendError datetime: Время последней ошибки. if (sys.GetSecDiff(LastDateTimeSendError, DateTime.Now) < SecBetweenSendError) { SaveError = true; return(false); } string imagebase64 = ""; string screenshoFormat = ""; string screenshotWidth = ""; string screenshotHeight = ""; string screenshotSize = ""; if (SaveScreenshot) { //Получение скриншота screenshoFormat = "WEBP"; screenshotWidth = Screen.PrimaryScreen.Bounds.Width.ToString(); screenshotHeight = Screen.PrimaryScreen.Bounds.Height.ToString(); Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics graphics = Graphics.FromImage(printscreen as Image); graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); byte[] webpImageData; WebP.EncodeLossly(printscreen, CompressRatio, out webpImageData); imagebase64 = Convert.ToBase64String(webpImageData); screenshotSize = FBAFile.GetFileSizeStr(webpImageData.Length, true, false); } additionalInfo = sys.AddRightCR(additionalInfo); additionalInfo += GetSystemInfo(); string sql = "INSERT INTO fbaError (EntityID, UserID, ErrorTime, ErrorText, ScreenshotFormat, ScreenshotWidth, ScreenshotHeight, ScreenshotSize, " + "CompressRatio, AdditionalInfo, ScreenshotData) VALUES (" + Var.CR + "123, " + Var.UserID + "," + sys.DateTimeCurrent() + ",'" + errorMes + "','" + screenshoFormat + "','" + screenshotWidth + "','" + screenshotHeight + "'," + screenshotSize + ",'" + Error.CompressRatio.ToString() + "','" + additionalInfo + "','" + imagebase64 + "')"; sys.Exec(DirectionQuery.Remote, sql); LastDateTimeSendError = DateTime.Now; } catch { //Ошибку не выдаем. } SaveError = true; return(true); }
/// <summary> /// Показ изображения. /// </summary> private void SelectError() { string errorID = dgvError.Value("ID"); if (errorID == "") { return; } var arr = new string[11]; string sql = "SELECT " + "ID, " + //0 "UserID, " + //1 "ErrorTime, " + //2 "ErrorText, " + //3 "ScreenshotData, " + //4 "ScreenshotFormat, " + //5 "ScreenshotWidth, " + //6 "ScreenshotHeight, " + //7 "ScreenshotSize, " + //8 "CompressRatio, " + //9 "AdditionalInfo " + //10 " from fbaError WHERE ID = " + errorID; if (!sys.GetValueArr(DirectionQuery.Remote, sql, ref arr)) { return; } if (arr[0] == "") { sys.SM("Не найдена ошибка!"); return; } tbID.Text = arr[0]; tbImageSize.Text = arr[6] + "x" + arr[7]; tbFormat.Text = arr[5]; tbErrorDate.Text = arr[2]; tbErrorText.Text = arr[3]; tbAddInfo.Text = arr[10]; tbUserID.Text = arr[1]; tbCompressRatio.Text = arr[9]; tbFileSize.Text = arr[8]; try { //Как было ранее: //byte[] arrayimg = Convert.FromBase64String(screenshotData); //Image image = Image.FromStream(new MemoryStream(arrayimg)); //pictureBox1.Image = image; //Test WebP to pictureBox Bitmap bmp6; byte[] arrayimg = Convert.FromBase64String(arr[4]); WebP.Decode(arrayimg, out bmp6); pictureBox1.Image = bmp6; ShowError(); } catch (Exception ex) { sys.SM("Ошибка при открытии изображения: " + ex.Message); return; } }