コード例 #1
0
        [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));
        }
コード例 #2
0
        [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));
        }