ckeditor3.6.4+ckfinder2.2.2 上传图片到指定

今朝正在进修mvc,正在做一个小我博客的网站,此中有关于文章的操纵,所以加上了富文本编辑器。我今朝应用的编辑器是ckeditor3.6.4+ckfinder2.2.2。


  今天用编辑器上传图片,弄了N久。发明上传图片的时辰,就直接上传到办事器,终极提交内容时辰,就把内容直接提交。然则总有那么种景象,万一内容提交不成功,那之前上传的图片不就在办事器成了垃圾了么。然则这个题目今朝还没解决,求高人指导,在什么时辰扫描一下BaseUrl = "<图片上传时,图片存放的地位>";!然后清除这些无用的图片。


  在网上百度了,说ckfinder可以批改config.ascx中的BaseUrl来批改上传图片存放的地位,然则我想动态的、按照不合景象来使上传的图片放在不合的地位。然后去弄弄了ckfinder,没有文档,看得晕头转向的。心想,本身写段代码来操纵办事器上的上传文件算了。


  今朝仅仅是解决了将上传的图片存放到指定的目次,并且批改ckeditor内容中的图片链接。对于多用户的小我网站来说,可能须要将用户的图片分类存放,并且还要改名(还没有什么大型小我网站的开辟经验,也不知道本身的设法对不合错误,求各位进步前辈辅佐斧正)。


  先上代码,恳请各位辅佐指出不足。拜谢。。


action:Default


 


Action Default 

 1 [HttpPost]

 2         public ActionResult Default(Article article)

 3         {

 4             string ss = article.ArticleContent;

 5 

 6             //新文件夹的路径

 7             string filenewpath = Request.PhysicalApplicationPath + "Content\\ss\\";

 8            

 9             ss = RepleaceImg(ss, filenewpath);

10 

11             Response.Write(ss);

12 

13             return Content("<script language=\"javascript\">{alert(\"sss\");location.href=\"/Home/Default\";}</script>");

14 //有点懒,没有零丁做个页面用于显示文章内容,当时就想快些调试好。

15         }



 


   这里说一下,Article是自定义的一个类,属性ArticleContent用了[skipValidation]。因为今朝学得还不深,我不会设置安然验证,若是在Default中应用FormCollection ,加上[validationInput(false)],在web.config中设置<httpRuntime>也试过,一向说我提交的Request.Form[""]存在安然隐患。求进步前辈们给些指导。。RepleaceImg()是自定义函数,用于调换ArticleContent中<img >的src。


  RepleaceImg的代码


 


RepleaceImg 

 1 private string RepleaceImg(string content, string filenewpath)

 2         {

 3             //新文件名列表

 4             List<string> lsImageNewName = new List<string>();

 5             //暂存文件名列表

 6             List<string> lsImageNameTemp = new List<string>();

 7             //ArticleContent中的图片地址列表,将要调换的文件名

 8             List<string> lsImageOleName = new List<string>();

 9 

10             //将要调换的文件名

11             string filename = "";

12             //文件上传的路径

13             string filepath = "";

14             //将要移动到的文件目次路径

15             //string filenewpath = "";

16             //新文件名

17             string filenewname = "";

18             //获取上传文件的路径,含文件名以及扩大名

19             string temp = "";

20 

21             //文章内容中有图片

22             if (content.IndexOf("src=\"") != -1)

23             {

24                 GetFilePath(content, lsImageOleName);

25             }

26 

27             //上传的图片所存放的地位

28             filepath = Request.PhysicalApplicationPath + "Content\\images\\images";

29            

30             if (!Directory.Exists(filenewpath))

31             {

32                 Directory.CreateDirectory(filenewpath);

33             }

34             //移动filepath中图片到filenewpath中。并且批改图片的文件名

35             filenewname = "";

36             if (Directory.Exists(filepath))

37             {

38                 foreach (string d in Directory.GetFileSystemEntries(filepath))

39                 {

40                     if (System.IO.File.Exists(d))

41                     {

42                         string strExtension = System.IO.Path.GetExtension(d);

43                         filenewname = filenewpath + DateTime.Now.ToString("yyyymmddhhssmmfff");

44                         System.IO.File.Move(d, filenewname + strExtension);

45                         lsImageNameTemp.Add(filenewname + strExtension);

46                     }

47                 }

48             }

49 

50             //调换,将文件图片的路径改成,<img>可以或许识此外路径

51             filenewname = "";

52             foreach (string m in lsImageNameTemp)

53             {

54                 filenewname = "http://www.cnblogs.com/Content/ss/" + m.Substring(m.LastIndexOf("\\") + 1, m.Length - m.LastIndexOf("\\") - 1);

55                 lsImageNewName.Add(filenewname);

56             }

57 

58             int count = 0;

59             foreach (string nametemp in lsImageOleName)

60             {

61                 try

62                 {

63                     content = content.Replace(nametemp, lsImageNewName[count]);

64                 }

65                 catch (Exception ex)

66                 {

67                     break;

68                 }

69                 finally

70                 {

71                     count++;

72                 }

73 

74             }

75 

76             return content;

77         }



 


GetFilePath的代码


GetFilePath 

 1  private void GetFilePath(string content,List<string> lsImageName)

 2         {

 3             string temp = "";

 4 

 5             if (content.IndexOf("src=\"") != -1)

 6             {

 7                 temp = content.Substring(content.IndexOf("src=\"") + 5, content.IndexOf("jpg\"") - content.IndexOf("src=\"") - 2);

 8                 lsImageName.Add(temp);

 9 

10                 //截取剩下的字符串

11                  string qqq = content.Substring(content.IndexOf("jpg\"") + 4);

12                  GetFilePath(qqq, lsImageName);

13             }

14             else

15             {

16                 return;

17             }

18         }



 


在编辑这段代码的时辰就没有推敲周全,后往返想起,还有种景象:若是内容中呈现如许的景象改怎么办


<script src=\"xxxx\">{document.GetElementById(\"img\").src=\"xxxx.jpg\"}</script>,但没有<img src=\"xxxx.jpg\">。


若是是如许的景象,这段代码也会认为内容中存在图片,处理惩罚起来应当会呈现错误。恳请各位在百忙中抽那么一小点时候,给菜鸟我些指导。拜谢。。


若是各位对这段代码有疑问的,可以尽管提出来,我会测验测验去答复。


 



 


2012-08-10


      白天的时辰进行了测验测验,当在ckeditor中输入<script src=\"xxxx\">{document.GetElementById(\"img\").src=\"xxxx.jpg\"}</script>的时辰,ckeditor会将这段代码给编码,里面的"<"、">"、"""都分别转成&lt;、&gt;、&quot;。如许string.indexof("src=\"")应当只会寻找<img>中的src了。


    别的,在RepleaceImg 函数中从头批改了下代码。在if(!content.indexof("src=\"")!=-1)的时辰才履行后续代码,如不哦没有,则直接返回content。ps:在本身的电脑上编辑的,然则如今没有将源码拷贝出来,所有没有粘上最新代码,也没有附上实验成果,不克不及很好的申明成果,请见谅。。


 

Admin

你可能感兴趣的:(ckeditor3.6.4+ckfinder2.2.2 上传图片到指定)