Files
KJD/TEMUKJD/KJDForms/ProductForms/FissionUserControl/FissionBrowserObject.cs
T

367 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using AllBase;
using AllBase.Model.Param.FissionManage;
using TemuKJD.KJDForms.BaseForms;
using TemuKJD.KJDForms.ToolForms;
using NaiBa.Util;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Work;
namespace TemuKJD.KJDForms.ProductForms
{
class FissionBrowserObject
{
public delegate void InformationReceivedHandler(string information);
public event InformationReceivedHandler InformationReceived;
/// <summary>
/// 编辑图片后更新到服务器
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string updatePic(string str)
{
string requestData = "data=" + GetHtml.UrlEncodeUtf8(str);
string url = BaseClass.FissionPicUrl;
string result = GetHtml.PostUtf8(url, requestData);
return result.Replace("https:", "http:");
}
string addResult = "";
public string addLocalPic()
{
// 单线程单元(STA)模式运行文件对话框,否则会报错。
System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(addLocalPicInvokeMethod));
InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA);
InvokeThread.Start();
InvokeThread.Join();
if (addResult.Equals("图片过大"))
{
BaseMsgForm.ShowInfo("本地图片大小不能超过500KB", "提示");
return "";
}
return addResult;
}
public string addLocalPic(bool isMultiselect, int maxSize = 1024)
{
addLocalPicInvokeMethod(isMultiselect, maxSize);
if (addResult.Equals("图片过大"))
{
BaseMsgForm.ShowInfo(("本地图片大小不能超过" + maxSize + "KB").Replace("1024KB", "1MB"), "提示");
return "";
}
return addResult;
}
private void addLocalPicInvokeMethod()
{
addLocalPicInvokeMethod(true);
}
private string addLocalPicInvokeMethod(bool isMultiselect, int maxSize = 500)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "图片文件|*.png;*.jpg;*.jpeg;*.gif";
ofd.ValidateNames = true;
ofd.CheckPathExists = true;
ofd.CheckFileExists = true;
ofd.Multiselect = isMultiselect;
if (ofd.ShowDialog() == DialogResult.OK)
{
var result = "";
foreach (var fName in ofd.FileNames)
{
FileInfo file = new FileInfo(fName);
var size = file.Length;
// 图片大小限制500k;
if (size <= 1024 * maxSize)
{
string strFileName = fName;
var base64 = "data:image/" + System.IO.Path.GetExtension(fName).Replace(".", "").Replace("jpeg", "jpg") +
";base64," + Convert.ToBase64String(System.IO.File.ReadAllBytes(strFileName));
result += updatePic(base64) + "|";
}
else
{
result += "图片过大|";
}
}
addResult = result.TrimEnd('|');
}
return addResult;
}
/// <summary>
/// 前端处理图片如果有跨域问题,将图片地址传到cs代码解决
/// </summary>
/// <param name="picUrl">跨域的图片地址</param>
/// <returns>图片的base64数据</returns>
public string getHttpPicBase64(string picUrl)
{
System.Drawing.Image image = System.Drawing.Image.FromStream(
System.Net.WebRequest.Create(picUrl).GetResponse().GetResponseStream());
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, image.RawFormat);
byte[] byteArray = ms.ToArray();
var str64 = "data:image/" + System.IO.Path.GetExtension(picUrl).Replace(".", "").Replace("jpeg", "jpg") +
";base64," + Convert.ToBase64String(byteArray);
ms.Close();
image.Dispose();
return str64;
}
/// <summary>
/// 使用美图秀秀软件修图
/// </summary>
/// <param name="src">图片网址</param>
/// <param name="bOpenMeitu">下载图片后是否打开美图</param>
public string OpenMeitu(string src, bool bOpenMeitu = true)
{
string imgName = System.IO.Path.GetFileNameWithoutExtension(src) +
System.IO.Path.GetExtension(src).Replace(".jpeg", ".jpg");
string savePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string saveFilePath = System.IO.Path.Combine(savePath, imgName);
System.Net.WebRequest imgRequst = System.Net.WebRequest.Create(src);
System.Drawing.Image downImage = System.Drawing.Image.FromStream(imgRequst.GetResponse().GetResponseStream());
downImage.Save(saveFilePath);
downImage.Dispose();
if (!bOpenMeitu) return "success";
if (System.IO.File.Exists(saveFilePath))
{
if (!System.IO.File.Exists(Fission.GetInstance().MeituPath))
{
//MessageBox.Show("请指定美图秀秀启动文件。");
if (MeituMessageDialog.ShowMessageDialog("请指定美图秀秀启动文件。\r\n如未安装美图秀秀,请下载。", "下载美图秀秀,指定启动文件") == "指定启动文件")
{
// 单线程单元(STA)模式运行文件对话框,否则会报错。
System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(SetMeituPath));
InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA);
InvokeThread.Start();
InvokeThread.Join();
}
}
if (System.IO.File.Exists(Fission.GetInstance().MeituPath))
{
try
{
int i = 0;
while (i < 2500)
{
System.Diagnostics.Process[] processList = System.Diagnostics.Process.GetProcesses();
if (processList.Any(p => p.ProcessName.ToLower() == "xiuxiu"))
{
System.Threading.Thread.Sleep(250);
i += 250;
continue;
}
break;
}
System.Diagnostics.Process.Start(Fission.GetInstance().MeituPath, saveFilePath);
return "success";
}
catch { }
}
}
return "failed";
}
private void SetMeituPath()
{
Fission.GetInstance().setMeituPath();
}
/// <summary>
/// 将美图修好的本地文件回传服务器
/// </summary>
public string PullBackPic(string src)
{
string imgName = Path.GetFileName(src);
string savePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string filePath = Path.Combine(savePath, imgName);
filePath = GetMeituHandledFilePath(filePath);
if (!File.Exists(filePath))
{
BaseMsgForm.ShowInfo("未找到修图文件,请确认已使用[美图秀秀]\r\n进行修图且保存路径为[覆盖原图]!", "提示");
return "";
}
var fileByte = System.IO.File.ReadAllBytes(filePath);
//using (FileStream fs = new FileStream(filePath,FileMode.Open,FileAccess.Read))
//{
// System.Drawing.Image img = Image.FromStream(fs);
// var width = img.Width;
// img.Dispose();
// if (width < 480)
// {
// BaseMsgForm.ShowError("详情图宽度不得小于480", "错误");
// return "";
// }
//}
if (fileByte.Length > 1024 * 500)
{
BaseMsgForm.ShowError("本地图片大小不能超过500KB", "错误");
return "";
}
var base64 = "data:image/" + System.IO.Path.GetExtension(filePath).Replace(".", "").Replace("jpeg", "jpg") +
";base64," + Convert.ToBase64String(fileByte);
var uploadResult = updatePic(base64);
return uploadResult;
}
void SendCmd(string information)
{
if (InformationReceived != null)
InformationReceived(information);
}
/// <summary>
/// 显示大图
/// </summary>
/// <param name="imgSrc"></param>
/// <returns></returns>
public string ShowBigImg(string imgSrc)
{
var f = Fission.GetInstance();
if (f != null && !string.IsNullOrEmpty(imgSrc))
{
string[] str = imgSrc.Split('|');
imgSrc = str[0];
string imgId = "";
if (str.Length > 1)
imgId = str[1];
return f.ShowBigImg(imgSrc, imgId);
}
return "error";
}
/// <summary>
/// 编辑图片后加载
/// </summary>
/// <param name="id"></param>
/// <param name="src"></param>
/// <param name="text"></param>
/// <returns></returns>
public string OnloadImg(string id, string src)
{
//src = Fission.RemovePrefix(src);
//if (src.Contains("deifei.com"))
//{
// var jdImg = Fission.jdTransparentImgList.Find(x => x.id == id);
// if (jdImg != null)
// {
// jdImg.OriginalImgUrl = src;
// return JsonHelper.SerializeObject(new { code = 1, src = "http://" + jdImg.OriginalImgUrl, msg = "原" });
// }
//}
return JsonHelper.SerializeObject(new { code = 0, src = src, msg = "" });
}
/// <summary>
/// 获取美图秀秀处理过的图片路径
/// </summary>
/// <param name="filePath">初始图片路径</param>
/// <returns>处理后的图片路径</returns>
private string GetMeituHandledFilePath(string filePath)
{
string filePathWithoutExt = filePath.Substring(0, filePath.LastIndexOf('.'));
//jpg png bmp为美图秀秀指定的三种图片保存格式
if (File.Exists(filePathWithoutExt + ".jpg"))
{
return filePathWithoutExt + ".jpg";
}
if (File.Exists(filePathWithoutExt + ".png"))
{
return filePathWithoutExt + ".png";
}
if (File.Exists(filePathWithoutExt + ".bmp"))
{
return filePathWithoutExt + ".bmp";
}
return filePath;
}
/// <summary>
/// 裂变页面 js回调添加入库数据
/// </summary>
/// <param name="jsonStr"></param>
/// <returns></returns>
public string updateFessionDate(string jsonStr)
{
try
{
FissionDataModel fessionDataModel = Newtonsoft.Json.JsonConvert.DeserializeObject<FissionDataModel>(jsonStr);
fessionDataModel.prop_pic?.Clear();
var props = JsonHelper.DeserializeJsonToObject<List<PropBase>>(fessionDataModel.props);
foreach (var prop in props)
{
foreach (var value in prop.Values)
{
if (!string.IsNullOrEmpty(value.image))
{
var strImg = value.image;
if (!strImg.StartsWith("http"))
strImg = "http:" + strImg;
fessionDataModel.prop_pic.Add(strImg);
}
}
}
jsonStr = JsonHelper.SerializeObject(fessionDataModel);
// 调用php后台
string requestData = UserLogin.GetSignaturex() + "&act=add&text=" + GetHtml.UrlEncodeUtf8(jsonStr);
string url = BaseClass.BuildFissionObjString("fession_api");
string result = GetHtml.PostUtf8(url, requestData);
if (!result.Contains("\"code\":0"))
{
}
return result;
}
catch (Exception ex)
{
return "{\"code\":1}";
}
}
public string GetFissionPicCountPreLine()
{
var count = ""; // NaiBa.Util.Helper.ConfigHelper.LoadConfig<string>("fission_pic_count_pre_line");
try { count = NaiBa.Util.Helper.FileHelper.ReadAllText("data\\config\\fission_pic_count_pre_line")?.Trim('\"'); } catch { }
if (string.IsNullOrEmpty(count))
return "3";
else
return count;
}
public string SaveFissionPicCountPreLine(string count)
{
try
{
NaiBa.Util.Helper.ConfigHelper.SaveConfig<string>("fission_pic_count_pre_line", count);
return "success";
}
catch
{
}
return "failed";
}
}
}