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

修改Handler类:

  1. public HttpSessionState Session {get; private set; }

  找到上下问得Session:

  1. public Handler(HttpContext context)
  2. {
  3. this.Request = context.Request;
  4. this.Response = context.Response;
  5. this.Context = context;
  6. this.Server = context.Server;
  7. this.Session = context.Session;
  8. }

 在controller.ashx中添加 

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

实现方法:

  1. public bool IsReusable
  2. {
  3. get
  4. {
  5. return false;
  6. }
  7. }

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

在UploadHandler添加:

  1. //var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
  2. //截屏过来的图片文件名固定,固定名称换成随机数
  3. //if (uploadFileName == "image.png")
  4. uploadFileName = random.Next(100000).ToString("D5")+".png";
  5.  
  6. var zhang = Session[""];
  7. var jie = 2; // Session[""];
  8. var xiaojie = 3; // Session[""];
  9. var savePath = string.Format("upload/image/{0:00}{1:00}{2:00}/{3}",
  10. zhang, jie, xiaojie, uploadFileName);

  

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

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

  1. var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
  2. //截屏过来的图片文件名固定,固定名称换成随机数
  3. //if (uploadFileName == "image.png")
  4.  
  5. //章节内容编辑上传图片,路径名加章节号,文件名称随机
  6. if (Session["zhangClass"] != null)
  7. {
  8. uploadFileName = random.Next(100000).ToString("D5") + ".png";
  9. int zhang = Convert.ToInt32(Session["zhangClass"]);
  10. int jie = Convert.ToInt32(Session["jieClass"]);
  11. int xiaojie = Convert.ToInt32(Session["xiaojieClass"]);
  12. savePath = string.Format("upload/image/{0:00}{1:00}{2:00}/{3}",
  13. zhang, jie, xiaojie, uploadFileName);
  14. }

  截屏图片的处理:

  1. private static string GenerateImageFileName(string uploadFileName, string folder)
  2. {
  3.  
  4. string[] files = Directory.GetFiles(folder);
  5. List<string> fileLenths =new List<string>();
  6. for (int i = 0; i < files.Count(); i++)
  7. {
  8.  
  9. var fileLenth = files[i].Substring(files[i].LastIndexOf(@"\") + 1);
  10.  
  11. var fileLenthNew = fileLenth.Substring(0, fileLenth.LastIndexOf("."));
  12.  
  13. fileLenths.Add(fileLenthNew);
  14.  
  15. }
  16.  
  17. var allNames = from file in fileLenths
  18. where file.Length==5 //&& Regex.IsMatch(file, @"^\d{5}\.+$")
  19. orderby file
  20. select file;
  21.  
  22. int num=0;
  23. if (allNames.Count() > 0)
  24. {
  25. var last = allNames.Last();
  26. if (last == null) return 1.ToString("D5");
  27. //num = Convert.ToInt32(last.Substring(0, last.IndexOf(".")));
  28. num = Convert.ToInt32(last);
  29. }
  30. return (num + 1).ToString("D5");
  31.  
  32. //随机生成
  33. //{
  34. // //uploadFileName = random.Next(100000).ToString("D5")
  35. // // + uploadFileName.Substring(uploadFileName.LastIndexOf("."));//".png";
  36. //}
  37.  
  38. }

  判断是否为int

  1. public static bool IsNumeric(string str)
  2. {
  3. if (str == null || str.Length == 0) //验证这个参数是否为空
  4. return false; //是,就返回False
  5. ASCIIEncoding ascii = new ASCIIEncoding();//new ASCIIEncoding 的实例
  6. byte[] bytestr = ascii.GetBytes(str); //把string类型的参数保存到数组里
  7.  
  8. foreach (byte c in bytestr) //遍历这个数组里的内容
  9. {
  10. if (c < 48 || c > 57) //判断是否为数字
  11. {
  12. return false; //不是,就返回False
  13. }
  14. }
  15. return true; //是,就返回True
  16. }

  汉字转拼音:

  1. private static string NormalizeImageFileName(string uploadFileName, string folder)
  2. {
  3.  
  4. string uploadNum= uploadFileName.Substring(0, uploadFileName.LastIndexOf("."));
  5.  
  6. if (IsNumeric(uploadNum) == true)
  7. {
  8. return uploadFileName;
  9. }
  10. else {
  11. string pingyin = uploadFileName.Replace(" ", "").Replace("+", "");
  12. var pingyins = PinYinConverterHelp.GetTotalPingYin(uploadFileName);
  13. pingyin = String.Join(",", pingyins.TotalPingYin);
  14. return pingyin;
  15. }
  16. }

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

  1. public class PinYinConverterHelp
  2. {
  3. public static PingYinModel GetTotalPingYin(string str)
  4. {
  5. var chs = str.ToCharArray();
  6. //记录每个汉字的全拼
  7. Dictionary<int, List<string>> totalPingYins = new Dictionary<int, List<string>>();
  8. for (int i = 0; i < chs.Length; i++)
  9. {
  10. var pinyins = new List<string>();
  11. var ch = chs[i];
  12. //是否是有效的汉字
  13. if (ChineseChar.IsValidChar(ch))
  14. {
  15. ChineseChar cc = new ChineseChar(ch);
  16. pinyins = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
  17. }
  18. else
  19. {
  20. pinyins.Add(ch.ToString());
  21. }
  22.  
  23. //去除声调,转小写
  24. pinyins = pinyins.ConvertAll(p => Regex.Replace(p, @"\d", "").ToLower());
  25. //去重
  26. pinyins = pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();
  27. if (pinyins.Any())
  28. {
  29. totalPingYins[i] = pinyins;
  30. }
  31. }
  32. PingYinModel result = new PingYinModel();
  33. foreach (var pinyins in totalPingYins)
  34. {
  35. var items = pinyins.Value;
  36. if (result.TotalPingYin.Count <= 0)
  37. {
  38. result.TotalPingYin = items;
  39. result.FirstPingYin = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();
  40. }
  41. else
  42. {
  43. //全拼循环匹配
  44. var newTotalPingYins = new List<string>();
  45. foreach (var totalPingYin in result.TotalPingYin)
  46. {
  47. newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));
  48. }
  49. newTotalPingYins = newTotalPingYins.Distinct().ToList();
  50. result.TotalPingYin = newTotalPingYins;
  51.  
  52. //首字母循环匹配
  53. var newFirstPingYins = new List<string>();
  54. foreach (var firstPingYin in result.FirstPingYin)
  55. {
  56. newFirstPingYins.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));
  57. }
  58. newFirstPingYins = newFirstPingYins.Distinct().ToList();
  59. result.FirstPingYin = newFirstPingYins;
  60. }
  61. }
  62. return result;
  63. }
  64. }
  65.  
  66. public class PingYinModel
  67. {
  68. public PingYinModel()
  69. {
  70. TotalPingYin = new List<string>();
  71. FirstPingYin = new List<string>();
  72. }
  73.  
  74. //全拼
  75. public List<string> TotalPingYin { get; set; }
  76.  
  77. //首拼
  78. public List<string> FirstPingYin { get; set; }
  79. }

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

  1. try
  2. {
  3. if (!string.IsNullOrEmpty(oldPath)) {
  4. File.Delete(Server.MapPath(oldPath));
  5. }
  6. }
  7. catch (Exception)
  8. {
  9. throw new ArgumentOutOfRangeException("删除原文件,如果不能删除不做处理!!");
  10. //删除原文件,如果不能删除不做处理!!
  11. }

  

 

UEditor上传自定义文件夹的更多相关文章

  1. js上传整个文件夹

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  2. Git上传空文件夹

    git上传的文件夹为空的时候 1,先删除空的文件夹 参考:https://www.cnblogs.com/wang715100018066/p/9694532.html 2,这个只能说是技巧不能说是方 ...

  3. web上传整个文件夹

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  4. WEB上传一个文件夹

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  5. ASP.NET上传一个文件夹

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  6. linux下怎么样上传下载文件夹

    Linux下目录复制:本机->远程服务器 scp -r /home/shaoxiaohu/test1 zhidao@192.168.0.1:/home/test2 test1为源目录,test2 ...

  7. plupload上传整个文件夹

    大容量文件上传早已不是什么新鲜问题,在.net 2.0时代,HTML5也还没有问世,要实现这样的功能,要么是改web.config,要么是用flash,要么是用一些第三方控件,然而这些解决问题的方法要 ...

  8. java+上传一个文件夹

    在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...

  9. java+上传整个文件夹的所有文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

随机推荐

  1. flirtlib 测试过程

    一. 安装flirtlib 1. 安装必要的依赖库 Boost >= 1.36 (submodules math and graph) 这个有了 Qt4 (for the gui)这个也有了 Q ...

  2. P2805 [NOI2009]植物大战僵尸

    题目地址:P2805 [NOI2009]植物大战僵尸 最大权闭合子图 若有向图 \(G\) 的子图 \(V\) 满足: \(V\) 中顶点的所有出边均指向 \(V\) 内部的顶点,则称 \(V\) 是 ...

  3. RabbitMQ四种交换机类型介绍

    RabbitMQ  原文地址: https://baijiahao.baidu.com/s?id=1577456875919174629&wfr=spider&for=pc 最新版本的 ...

  4. Node.js的异步IO和事件轮询

     想象一下,以前我们在写程序时, 如果程序在I/O上阻塞了,当有更多请求过来时,服务器会怎么处理呢?在这种情景中通常会用多线程的方式.一种常见的实现是给每个连接分配一个线程,并为那些连接设置一个线程池 ...

  5. Linux运行时I/O设备的电源管理框架【转】

    转自:https://www.cnblogs.com/coryxie/archive/2013/03/01/2951243.html 本文介绍Linux运行时I/O设备的电源管理框架.属于Linux内 ...

  6. 关于第一个java程序HelloWorld的感慨

    今天入手第一个java程序,严格意义上来讲,是真正开始研究java的第一个“Hello World": 1.没有用自动提示,虽然System.out.println()还是自动蹦出来了,但是 ...

  7. 使用chttpfile的一个错误

    先贴一部分代码 CString strHttpName="http://localhost/TestReg/RegForm.aspx"; // 需要提交数据的页面 CString ...

  8. bzoj 1175: The stairways of Saharna

    一道杨氏矩阵的题,萌新初入门,还不是很懂,这篇 blog 讲的超级好(就是看图有点麻烦) 据说这玩意儿可以代替堆和平衡树用,支持插入.删除.查询,跑得还挺快的(慢着,复杂度好像是 n^2 ? 而且空间 ...

  9. 转载:UML学习(四)-----状态图(silent)

    原文:http://www.cnblogs.com/silent2012/archive/2011/11/01/2178278.html 状态图主要用于描述对象具有的各种状态.状态之间的转换过程以及触 ...

  10. SQL Server代码段

    1.cast和convert ' as int) -- 123 ') -- 123 select CAST(123.4 as int) -- 123 select CONVERT(int, 123.4 ...