UEditor上传自定义文件夹

需求:使用UEditor上传时需要知道具体到哪个章节得图片,所以得根据Session中得文件重新定义

修改Handler类:

 public HttpSessionState Session  {get; private set; }

  找到上下问得Session:

public Handler(HttpContext context)
	{
        this.Request = context.Request;
        this.Response = context.Response;
        this.Context = context;
        this.Server = context.Server;
        this.Session = context.Session;
    }

 在controller.ashx中添加 

public class UEditorHandler : IHttpHandler,System.Web.SessionState.IRequiresSessionState

实现方法:

 public bool IsReusable
   {
        get
        {
            return false;
        }
   }

由于截屏后得图片得名字都一样所以需要随机生成:

在UploadHandler添加:

      //var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
        //截屏过来的图片文件名固定,固定名称换成随机数
        //if (uploadFileName == "image.png")
         uploadFileName = random.Next(100000).ToString("D5")+".png";

        var zhang =  Session[""];
        var jie = 2; // Session[""];
        var xiaojie = 3; // Session[""];
        var savePath = string.Format("upload/image/{0:00}{1:00}{2:00}/{3}",
        zhang, jie, xiaojie, uploadFileName);

  

生成得文件就到了自定义得目录下:

 

 如果想其他UEditor走以前得方法做一个判断:

var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
        //截屏过来的图片文件名固定,固定名称换成随机数
        //if (uploadFileName == "image.png")

        //章节内容编辑上传图片,路径名加章节号,文件名称随机
        if (Session["zhangClass"] != null)
        {
            uploadFileName = random.Next(100000).ToString("D5") + ".png";
            int zhang = Convert.ToInt32(Session["zhangClass"]);
            int jie = Convert.ToInt32(Session["jieClass"]);
            int xiaojie = Convert.ToInt32(Session["xiaojieClass"]);
            savePath = string.Format("upload/image/{0:00}{1:00}{2:00}/{3}",
         zhang, jie, xiaojie, uploadFileName);
        }

  截屏图片的处理:

private static string GenerateImageFileName(string uploadFileName, string folder)
    {

        string[] files = Directory.GetFiles(folder);
        List<string> fileLenths =new  List<string>();
        for (int i = 0; i < files.Count(); i++)
        {

            var fileLenth = files[i].Substring(files[i].LastIndexOf(@"\") + 1);

            var fileLenthNew = fileLenth.Substring(0, fileLenth.LastIndexOf("."));

            fileLenths.Add(fileLenthNew);
            
        }
        
        var allNames = from file in fileLenths
                       where file.Length==5 //&& Regex.IsMatch(file, @"^\d{5}\.+$")
                orderby file
                select file;
       
        int num=0;
        if (allNames.Count() > 0)
        {
            var last = allNames.Last();
            if (last == null) return 1.ToString("D5");
            //num = Convert.ToInt32(last.Substring(0, last.IndexOf(".")));
            num = Convert.ToInt32(last);
        }
        return (num + 1).ToString("D5");



        //随机生成
        //{
        //    //uploadFileName = random.Next(100000).ToString("D5")
        //    //       + uploadFileName.Substring(uploadFileName.LastIndexOf("."));//".png";
        //}

    }

  判断是否为int

  public static bool IsNumeric(string str)
    {
        if (str == null || str.Length == 0)    //验证这个参数是否为空
            return false;                           //是,就返回False
        ASCIIEncoding ascii = new ASCIIEncoding();//new ASCIIEncoding 的实例
        byte[] bytestr = ascii.GetBytes(str);         //把string类型的参数保存到数组里

        foreach (byte c in bytestr)                   //遍历这个数组里的内容
        {
            if (c < 48 || c > 57)                          //判断是否为数字
            {
                return false;                              //不是,就返回False
            }
        }
        return true;                                        //是,就返回True
    }

  汉字转拼音:

private static string NormalizeImageFileName(string uploadFileName, string folder)
    {
        
        string uploadNum= uploadFileName.Substring(0, uploadFileName.LastIndexOf("."));

        if (IsNumeric(uploadNum) == true)
        {
            return uploadFileName;
        }
        else {
            string pingyin = uploadFileName.Replace(" ", "").Replace("+", "");
            var pingyins = PinYinConverterHelp.GetTotalPingYin(uploadFileName);
            pingyin = String.Join(",", pingyins.TotalPingYin);
            return pingyin;
        }
    }

 拼音扩展类:(nuget安装程序包ChnCharInfo)

public class PinYinConverterHelp
    {
        public static PingYinModel GetTotalPingYin(string str)
        {
            var chs = str.ToCharArray();
            //记录每个汉字的全拼
            Dictionary<int, List<string>> totalPingYins = new Dictionary<int, List<string>>();
            for (int i = 0; i < chs.Length; i++)
            {
                var pinyins = new List<string>();
                var ch = chs[i];
                //是否是有效的汉字
                if (ChineseChar.IsValidChar(ch))
                {
                    ChineseChar cc = new ChineseChar(ch);
                    pinyins = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
                }
                else
                {
                    pinyins.Add(ch.ToString());
                }

                //去除声调,转小写
                pinyins = pinyins.ConvertAll(p => Regex.Replace(p, @"\d", "").ToLower());
                //去重
                pinyins = pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();
                if (pinyins.Any())
                {
                    totalPingYins[i] = pinyins;
                }
            }
            PingYinModel result = new PingYinModel();
            foreach (var pinyins in totalPingYins)
            {
                var items = pinyins.Value;
                if (result.TotalPingYin.Count <= 0)
                {
                    result.TotalPingYin = items;
                    result.FirstPingYin = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();
                }
                else
                {
                    //全拼循环匹配
                    var newTotalPingYins = new List<string>();
                    foreach (var totalPingYin in result.TotalPingYin)
                    {
                        newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));
                    }
                    newTotalPingYins = newTotalPingYins.Distinct().ToList();
                    result.TotalPingYin = newTotalPingYins;

                    //首字母循环匹配
                    var newFirstPingYins = new List<string>();
                    foreach (var firstPingYin in result.FirstPingYin)
                    {
                        newFirstPingYins.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));
                    }
                    newFirstPingYins = newFirstPingYins.Distinct().ToList();
                    result.FirstPingYin = newFirstPingYins;
                }
            }
            return result;
        }
    }

    public class PingYinModel
    {
        public PingYinModel()
        {
            TotalPingYin = new List<string>();
            FirstPingYin = new List<string>();
        }

        //全拼
        public List<string> TotalPingYin { get; set; }

        //首拼
        public List<string> FirstPingYin { get; set; }
    }

  这样有重复的就可以删除:

  try
            {
                if (!string.IsNullOrEmpty(oldPath)) {
                    File.Delete(Server.MapPath(oldPath));
                }
            }
            catch (Exception)
            {
                throw new ArgumentOutOfRangeException("删除原文件,如果不能删除不做处理!!");
                //删除原文件,如果不能删除不做处理!!
            }

  

 

posted @ 2018-05-14 17:32  石shi  阅读(372)  评论(0编辑  收藏  举报