zoukankan      html  css  js  c++  java
  • 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("删除原文件,如果不能删除不做处理!!");
                    //删除原文件,如果不能删除不做处理!!
                }
    

      

     

  • 相关阅读:
    102. 教程:重装谷歌浏览器的教程
    IGBT知识普及
    [刷机资源] 荣耀8 E5 B391 V2 ROM集合 Xposed DPI调整等 N多自定义功能 Kangvip@HRT( 2017-9-28)
    ITPUB附件下载免输验证码 (实际下载地址的规则)
    花生壳内网穿透不再支持国外IP!
    golang 如何开发windows窗口界面
    golang 热重启
    强化go get命令
    go mod get go-git timeout
    golang单一职责原则接口设计例子
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/9037197.html
Copyright © 2011-2022 走看看