CKEditor不借助CKFinder实现图片上传(.net版 ashx实现)
参考博客:http://blog.csdn.net/mydwr/article/details/8669594
本人版本:4.4.6
打开文件:ckeditor/plugins/image/dialogs/image.js
搜索内容:【c.config.image_previewText】,并删掉其后引号内的内容。
删除后格式:【c.config.image_previewText||""】。
与原文差异:原内容原文中是【b.config.image_previewText】,我这里是【c.config.image_previewText】,可能是版本不同的原因;原文中包括其后内容的包括号是单引号,我的版本是双引号,不影响使用。
修改影响:预览界面中杂乱的字符消失。
搜索内容:“upload”,并找到:【id:"Upload",hidden:!0】。
替换内容:将hidden的值改为0。
与原文差异:原文hidden后的值是true,我这里是非0。
修改影响:编辑器图片界面的上传按钮及选项卡出现。
打开文件:ckeditor/config.js文件
在配置的最后添加一条【config.filebrowserImageUploadUrl = "【ashx上传处理页面路径】";】
如果只是进行以上的设置的话,在图片上传完毕之后,会提示【缺少图像源文件地址】。
为了使其正常运行,则需要在图片上传成功的返回值中添加script将图片地址输入预览当中。
代码如下【注意将uploadImages/替换为图片存储的文件夹,modifiedName替换为上传后存储的文件名】:
1 context.Response.Write("<script type=\"text/javascript\">"); 2 context.Response.Write("window.parent.CKEDITOR.tools.callFunction(" + callbackNumber + ",‘" + "uploadImages/" + modifiedName + "‘,‘‘)"); 3 context.Response.Write("</script>");
一定要将context.Response.ContentType设置为"text/html",而不是默认的"text/plain",返回的值才会是html代码而不是不能运行的纯字符串。
ashx上传处理页面如下【我的处理比较繁琐,各位可自行简化】:
1 public class UploaderHandler : IHttpHandler 2 { 3 4 public void ProcessRequest(HttpContext context) 5 { 6 context.Response.ContentType = "text/html"; 7 8 //对文件进行校验 9 if (1 > context.Request.Files.Count) 10 { 11 ResponseWriteEnd(context, "<span style=‘color: red; font-size: 20px;‘>*请选择上传文件!</span>"); 12 return; 13 } 14 else 15 { 16 HttpPostedFile _upfile = context.Request.Files[0]; 17 string fileName = _upfile.FileName; 18 string fileType = fileName.Substring(fileName.LastIndexOf(".") + 1).ToLower(); 19 int imgLength = _upfile.ContentLength;//获取文件的字节大小 20 21 if (!(fileType.Equals("jpg") || fileType.Equals("png") || fileType.Equals("bmp") || fileType.Equals("gif"))) 22 { 23 ResponseWriteEnd(context, "<span style=‘color: red; font-size: 20px;‘>*只能上传jpg/png/bmp/gif格式的图片!</span>"); //只能上传JPG格式图片 24 return; 25 } 26 else 27 { 28 if (imgLength > 5 * 1024 * 1024) 29 { 30 ResponseWriteEnd(context, "<span style=‘color: red; font-size: 20px;‘>*图片最大不能超过5M!</span>"); //图片不能大于5M 31 return; 32 } 33 else 34 { 35 try 36 { 37 // 构造简单的防重复文件名 38 string callbackNumber = context.Request.QueryString["CKEditorFuncNum"]; 39 string modifiedName = DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss_") + fileName; 40 string savePathName = context.Server.MapPath("uploadImages/" + modifiedName); 41 _upfile.SaveAs(savePathName); 42 if (_upfile.InputStream != null) 43 { 44 _upfile.InputStream.Close(); 45 } 46 // 上传结束后自动跳转到预览界面,并显示预览 47 context.Response.Write("<script type=\"text/javascript\">"); 48 context.Response.Write("window.parent.CKEDITOR.tools.callFunction(" + callbackNumber + ",‘" + "uploadImages/" + modifiedName + "‘,‘‘)"); 49 context.Response.Write("</script>"); 50 ResponseWriteEnd(context, "<span style=‘font-size: 20px;‘>上传成功!</span>"); //上传成功 51 return; 52 } 53 catch 54 { 55 ResponseWriteEnd(context, "<span style=‘color: red; font-size: 20px;‘>服务器内部错误!</span>"); 56 return; 57 } 58 } 59 } 60 } 61 } 62 63 public bool IsReusable 64 { 65 get 66 { 67 return false; 68 } 69 } 70 71 private void ResponseWriteEnd(HttpContext context, string message) 72 { 73 context.Response.Write(message); 74 context.Response.End(); 75 } 76 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。