[ValidateInput(false)] //关闭验证 public ActionResult NoticeUpdate(B_Notice pwNotice) { try { //保存现在插入的图片 List <string> savedImageList = new List <string>(); //保存原始插入图片 List <string> oldSavedImageList = new List <string>(); //检查公告标题不为空 if (!string.IsNullOrEmpty(pwNotice.NoticeName)) {//查询原始公告信息 B_Notice dbNotice = (from tbNoticeTable in myModels.B_Notice where tbNoticeTable.NoticeID == pwNotice.NoticeID select tbNoticeTable).Single(); //检查目录是否存在,不存在就创建 if (!Directory.Exists(Server.MapPath("~/Document/Notice/Text/"))) { Directory.CreateDirectory(Server.MapPath("~/Document/Notice/Text/")); } //检查目录是否存在,不存在就创建 if (!Directory.Exists(Server.MapPath("~/Document/Notice/NoticeCarousel/"))) { //CreateDirectory 指定路径创建所有目录跟子目录 Directory.CreateDirectory(Server.MapPath("~/Document/Notice/NoticeCarousel/")); } //用txt文件保持公告内容 //txt文件名称 string fileName; //txt文件路径 string filePath; //加载原公告内容 (路径加上内容名称) string oldFilePath = Server.MapPath("~/Document/Notice/Text/") + dbNotice.NoticeContent; //判断原公告内容是否存在 if (System.IO.File.Exists(oldFilePath)) { //读取原始文本内容 //原来文本存在文件 ReadAllText读取 string oldTextContent = System.IO.File.ReadAllText(oldFilePath); //匹配出文件名称 保存到list oldSavedImageList Matches匹配出图片的名称 MatchCollection oldMatchs = Regex.Matches(oldTextContent, "(?<=Document/Notice/).+?(?=\".+?/>)"); foreach (Match match in oldMatchs) { //原来的文本,需要更新数据 oldSavedImageList.Add(match.Value); } //获取文件名称 fileName = dbNotice.NoticeContent; //文件路径 filePath = oldFilePath; } else { //不存在的文件 就重新创建一个文件名称 fileName = DateTime.Now.ToString("yyyy-MM-dd") + "-" + Guid.NewGuid() + ".txt"; //不存在文件路径 重新创建一个路径 filePath = Server.MapPath("~/Document/Notice/Text/") + fileName; } //新修改后提交txt的文件内容 string textContent = pwNotice.NoticeContent; //获取最终匹配保存名称到数据中的文件 MatchCollection matchs = Regex.Matches(textContent, "(?<=/Document/Notice/).+?(?=\".+?/>)"); foreach (Match match in matchs) {// 把保存到的图片加到 savedImageList里面去 savedImageList.Add(match.Value); } //检查没有使用的插图,将其删除 遍历原来的插图文件列表oldSavedImageList,如在现在的文件列表savedImageList,则在使用,如不存在,则未使用过的应该移除掉 foreach (string str in oldSavedImageList) {//判断是否存在,不存在就删除 if (!savedImageList.Contains(str)) { //删除文件(先获取地址名称加收文件名) string dfilePath = Server.MapPath("~/Document/Notice/") + str; try {//从物理地址上移除掉 System.IO.File.Delete(dfilePath); } catch (Exception e) { Console.WriteLine(e); } } } // //获取上传的临时插图文件表(未保存的) List <string> tempFile = new List <string>(); if (Session["tempEditorFile"] != null)//tempEditorFile 记录修改的时候上传的图片 { tempFile = Session["tempEditorFile"] as List <string>; } if (tempFile != null) { string dFilePath = Server.MapPath("~/Document/Notice/"); //遍历临时文件表 foreach (string s in tempFile) { //当临时文件表中的文件 不存在 与被保存的文件时,删除该文件,避免文件冗余 if (!savedImageList.Contains(s)) { string strdeletePath = dFilePath + s; try { //把复文本框的冗余删除掉 System.IO.File.Delete(strdeletePath); } catch (Exception e) { Console.WriteLine(e); } } } } //保存文件 公告内容的txt文件 //StreamWriter 输出流 UTF8Encoding(false)不要编码扩展 false不是追加就是覆盖 TextWriter textWriter = new StreamWriter(filePath, false, new System.Text.UTF8Encoding(false)); textWriter.Write(textContent); textWriter.Close();//关闭流 //更新公告信息 dbNotice.NoticeTypeID = pwNotice.NoticeTypeID; dbNotice.PromulgatorUnitID = pwNotice.PromulgatorUnitID; dbNotice.NoticeName = pwNotice.NoticeName; dbNotice.Effective = pwNotice.Effective; dbNotice.ReleaseTimeStr = pwNotice.ReleaseTimeStr;//发布更新时间 dbNotice.NoticeContent = fileName; //保存更新 myModels.Entry(dbNotice).State = System.Data.Entity.EntityState.Modified; if (myModels.SaveChanges() > 0) { int intNoticeId = pwNotice.NoticeID; //保存附件文件 //获取session中的文件表 List <FilesVo> sessionFiles = new List <FilesVo>(); if (Session["sessionFiles"] != null) { sessionFiles = Session["sessionFiles"] as List <FilesVo>; } //获取oldSessionFiles原来的附件文件列表 List <FilesVo> oldSessionFiles = new List <FilesVo>(); var ss = Session["oldSessionFiles"]; if (Session["oldSessionFiles"] != null) { oldSessionFiles = Session["oldSessionFiles"] as List <FilesVo>; } //添加附件 List <FilesVo> addFiles = new List <FilesVo>(); if (sessionFiles != null) { //sessionFiles新附件列表中的文件不在 oldSessionFiles旧附件列表中的文件就是新增的 sessionFiles这里面有的,而oldSessionFiles没有的,就是新添加的附件 foreach (FilesVo filesVo in sessionFiles) { if (!oldSessionFiles.Contains(filesVo)) { addFiles.Add(filesVo); } } } //移除附件 如果oldSessionFiles有的,而sessionFiles没有的就是被移除掉了 List <FilesVo> deleteFiles = new List <FilesVo>(); if (oldSessionFiles != null) { foreach (FilesVo filesVo in oldSessionFiles) {//判断是否在sessionFiles中 if (!sessionFiles.Contains(filesVo)) { deleteFiles.Add(filesVo); } } } //有新上传的附件 if (addFiles.Count > 0) { //添加的时候一定要用PW_File //遍历addFiles List <B_File> listfFiles = new List <B_File>(); for (int i = 0; i < addFiles.Count; i++) { B_File file = new B_File(); file.NoticeID = intNoticeId; file.FileTypeID = addFiles[i].FileTypeID; file.Files = addFiles[i].Files; listfFiles.Add(file); } //把新添加的附件到保存listfFiles myModels.B_File.AddRange(listfFiles); myModels.SaveChanges(); } //有移除的附件 if (deleteFiles.Count > 0) { //获取上传的附件的目录(物理路径·) string dFilePath = Server.MapPath("~/Document/Notice/"); List <B_File> listfFiles = new List <B_File>(); for (int i = 0; i < deleteFiles.Count; i++) { int fileId = deleteFiles[i].FileID; B_File file = (from tbFile in myModels.B_File where tbFile.FileID == fileId select tbFile).Single(); listfFiles.Add(file); //删除文件 try { System.IO.File.Delete(dFilePath + deleteFiles[i].FileName); } catch (Exception e) { Console.WriteLine(e); } } //保存 myModels.B_File.RemoveRange(listfFiles); myModels.SaveChanges();//对应的数据库删除 } //处理完了之后移除session Session.Remove("tempEditorFile"); Session.Remove("sessionFiles"); Session.Remove("oldSessionFiles"); return(Json(true, JsonRequestBehavior.AllowGet)); } } } catch (Exception e) { Console.WriteLine(e); } return(Json(false, JsonRequestBehavior.AllowGet)); }
[ValidateInput(false)] //把验证方法关掉 public ActionResult NoticeInsert(B_Notice Notice, HttpPostedFileBase noticeCarouseImage, string noticeCarousel) { try { //定义list 存放需要保存的复文本框图片的名称(路径) List <string> savedImageList = new List <string>(); if (!string.IsNullOrEmpty(Notice.NoticeName) && !string.IsNullOrEmpty(Notice.NoticeContent)) { //检查 存放公告内容的 目录是否存在,不存在就创建 if (!System.IO.Directory.Exists(Server.MapPath("~/Document/Notice/Text/"))) { Directory.CreateDirectory(Server.MapPath("~/Document/Notice/Text/")); } // --->用txt文件来保存公告内容 //txt文件名称 也就是扩展名称 string fileName = DateTime.Now.ToString("yyyy-MM-dd") + "-" + Guid.NewGuid() + ".txt"; //txt文件路径 完整的路径 string filePath = Server.MapPath("~/Document/Notice/Text/") + fileName; //txt文件内容 公告的内容 string textCount = Notice.NoticeContent; //-----获取最终保存的图片文件 正则表达式 System.Text.RegularExpressions //MatchCollection匹配之后返回的多条数据 //Matches只会返回第一个匹配值 只有满足正则表达式条件都会返回回来 System.Text.RegularExpressions.MatchCollection matchs = System.Text.RegularExpressions.Regex.Matches(textCount, "(?<=/Document/Notice/).+?(?=\".+?/>)"); foreach (System.Text.RegularExpressions.Match match in matchs) { savedImageList.Add(match.Value); } //保存文件 txt文件 //StreamWriter 文件路径,是否追加,文件编码 //TextWriter属于IO流 StreamWriter文件操作流 filePath路径 false 你是追加还是覆盖,追加是true 覆盖就是false 追加就是从最后一个数继续追加下去,覆盖就是直接在原有的数据直接删除覆盖掉 UTF8Encoding(false)) 编码把Tum的扩展去掉 TextWriter textWriter = new StreamWriter(filePath, false, new System.Text.UTF8Encoding(false)); textWriter.Write(textCount); //把文件内容直接写进去 textWriter.Close(); //手动把IO流关掉 //保存公告信息 //Notice.UserID = 1;//用户ID 需要跟上面定义的一样 Notice.NoticeContent = fileName; //公告内容 需要跟上面定义的一样 Notice.ReleaseTimeStr = DateTime.Now; //发布时间 //保存公告数据 myModels.B_Notice.Add(Notice); if (myModels.SaveChanges() > 0) { int intNoticeId = Notice.NoticeID; //--->保存附件文件 //获取session中的文件表 List <FilesVo> sessionFiles = new List <FilesVo>(); if (Session["sessionFiles"] != null) { sessionFiles = Session["sessionFiles"] as List <FilesVo>; } //有上传的附件 if (sessionFiles != null && sessionFiles.Count > 0) { List <B_File> listfFiles = new List <B_File>(); //便利下面的session for (int i = 0; i < sessionFiles.Count; i++) { B_File file = new B_File(); file.NoticeID = intNoticeId; file.FileTypeID = sessionFiles[i].FileTypeID; file.Files = sessionFiles[i].Files; listfFiles.Add(file); } //保存 //AddRange 保存一个列表,多条数据 add 是一条 myModels.B_File.AddRange(listfFiles); myModels.SaveChanges(); } //清理上传到复文本框中,后被删除(即未被使用的图片) //获取上传的临时图片文件表(未保存的) List <string> tempFile = new List <string>(); if (Session["tempEditorFile"] != null) { //session上传之后,定义一个tempEditorFile tempFile = Session["tempEditorFile"] as List <string>; } if (tempFile != null && tempFile.Count > 0) { //获取路径 string dFilePath = Server.MapPath("~/Document/Notice/"); //遍历临时文件表 //重命名按主Ctrl键+r+r 可直接修改 foreach (string img in tempFile) { //当临时文件表中的文件不存在于被保存的文件时,删除该文件,避免文件冗余 // if (!savedImageList.Contains(img)) { //拼接要删除的文件 string strdeletePath = dFilePath + img; try { System.IO.File.Delete(strdeletePath); } catch (Exception e) { Console.WriteLine(e); } } } } //移除session Session.Remove("sessionFiles"); Session.Remove("tempEditorFile"); return(Json(true, JsonRequestBehavior.AllowGet)); } else { } } } catch (Exception e) { Console.WriteLine(e); } return(Json(true, JsonRequestBehavior.AllowGet)); }