在线编辑器 KindEditor 在ASP.NET MVC 中使用

   最近一段时间 一直做人才网,是ASP.NET MVC 框架做的,由于事情比较多就没时间闲下来看东西,这次来写个有关在线编辑器的。
   之前做webforms时一直用FckEditor一直还感觉不错,用起来也方便,但是我们现在在ASP.NET MVC上开发就不用服务器控件,所以就不大好,
之前还是在用这个在线编辑,可以发现在去做个隐藏域将我们的值给他,但好来又发现验证不好去验证,因为是框架做的。
  所以就一直郁闷,这怎么办呢,想了又想,今天在网上看到了有关KindEditor,上面写说拍拍也在用,所以就下个看看的,真的还不错。
界面满不错的,功能也很强大,可是发现也不好在MVC中用,因为我要做个Action来上传的浏览文件,不过例子中是用webServer来做的,可是那样不大好,要引用一个JsonDll,是用来生成Json日的,后来就去网上找看看没有Mvc上传的,果然找了个。可以还不能浏览啊,后来发现简单啊,只要上加个生成的类型就OK了,就把浏览图片也加上去了。
 
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.Mvc;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Collections;

namespace MvcApplication.Controllers
{
    [HandleError]
    [ValidateInput(
false)]
    
public class HomeController : Controller
    {
        
public ActionResult Index()
        {
            ViewData[
"Message"= "Welcome to ASP.NET MVC!";

            
return View();
        }

        [HttpPost]
        
public ActionResult Index(FormCollection form)
        {
            Response.Write(form[
"Textarea1"].ToString());
            
return View();
        }

        
#region 上传
        [HttpPost]
        
public ActionResult UploadImage()
        {
            
string savePath = "/editor/attached/";
            
string saveUrl = "/editor/attached/";
            
string fileTypes = "gif,jpg,jpeg,png,bmp";
            
int maxSize = 1000000;

            Hashtable hash 
= new Hashtable();

            HttpPostedFileBase file 
= Request.Files["imgFile"];
            
if (file == null)
            {
                hash 
= new Hashtable();
                hash[
"error"= 0;
                hash[
"url"= "请选择文件";
                
return Json(hash);
            }

            
string dirPath = Server.MapPath(savePath);
            
if (!Directory.Exists(dirPath))
            {
                hash 
= new Hashtable();
                hash[
"error"= 0;
                hash[
"url"= "上传目录不存在";
                
return Json(hash);
            }

            
string fileName = file.FileName;
            
string fileExt = Path.GetExtension(fileName).ToLower();

            ArrayList fileTypeList 
= ArrayList.Adapter(fileTypes.Split(','));

            
if (file.InputStream == null || file.InputStream.Length > maxSize)
            {
                hash 
= new Hashtable();
                hash[
"error"= 0;
                hash[
"url"= "上传文件大小超过限制";
                
return Json(hash);
            }

            
if (string.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
            {
                hash 
= new Hashtable();
                hash[
"error"= 0;
                hash[
"url"= "上传文件扩展名是不允许的扩展名";
                
return Json(hash);
            }

            
string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
            
string filePath = dirPath + newFileName;
            file.SaveAs(filePath);
            
string fileUrl = saveUrl + newFileName;

            hash 
= new Hashtable();
            hash[
"error"= 0;
            hash[
"url"= fileUrl;

            
return Json(hash, "text/html;charset=UTF-8"); ;
        }
        
#endregion

        
#region 浏览
        
public ActionResult ProcessRequest()
        {
            
//String aspxUrl = context.Request.Path.Substring(0, context.Request.Path.LastIndexOf("/") + 1);

            
//根目录路径,相对路径
            String rootPath = "/editor/attached/";
            
//根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/
            String rootUrl = "/editor/attached/";
            
//图片扩展名
            String fileTypes = "gif,jpg,jpeg,png,bmp";

            String currentPath 
= "";
            String currentUrl 
= "";
            String currentDirPath 
= "";
            String moveupDirPath 
= "";

            
//根据path参数,设置各路径和URL
            String path = Request.QueryString["path"];
            path 
= String.IsNullOrEmpty(path) ? "" : path;
            
if (path == "")
            {
                currentPath 
= Server.MapPath(rootPath);
                currentUrl 
= rootUrl;
                currentDirPath 
= "";
                moveupDirPath 
= "";
            }
            
else
            {
                currentPath 
= Server.MapPath(rootPath) + path;
                currentUrl 
= rootUrl + path;
                currentDirPath 
= path;
                moveupDirPath 
= Regex.Replace(currentDirPath, @"(.*?)[^\/]+\/$""$1");
            }

            
//排序形式,name or size or type
            String order = Request.QueryString["order"];
            order 
= String.IsNullOrEmpty(order) ? "" : order.ToLower();

            
//不允许使用..移动到上一级目录
            if (Regex.IsMatch(path, @"\.\."))
            {
                Response.Write(
"Access is not allowed.");
                Response.End();
            }
            
//最后一个字符不是/
            if (path != "" && !path.EndsWith("/"))
            {
                Response.Write(
"Parameter is not valid.");
                Response.End();
            }
            
//目录不存在或不是目录
            if (!Directory.Exists(currentPath))
            {
                Response.Write(
"Directory does not exist.");
                Response.End();
            }

            
//遍历目录取得文件信息
            string[] dirList = Directory.GetDirectories(currentPath);
            
string[] fileList = Directory.GetFiles(currentPath);

            
switch (order)
            {
                
case "size":
                    Array.Sort(dirList, 
new NameSorter());
                    Array.Sort(fileList, 
new SizeSorter());
                    
break;
                
case "type":
                    Array.Sort(dirList, 
new NameSorter());
                    Array.Sort(fileList, 
new TypeSorter());
                    
break;
                
case "name":
                
default:
                    Array.Sort(dirList, 
new NameSorter());
                    Array.Sort(fileList, 
new NameSorter());
                    
break;
            }

            Hashtable result 
= new Hashtable();
            result[
"moveup_dir_path"= moveupDirPath;
            result[
"current_dir_path"= currentDirPath;
            result[
"current_url"= currentUrl;
            result[
"total_count"= dirList.Length + fileList.Length;
            List
<Hashtable> dirFileList = new List<Hashtable>();
            result[
"file_list"= dirFileList;
            
for (int i = 0; i < dirList.Length; i++)
            {
                DirectoryInfo dir 
= new DirectoryInfo(dirList[i]);
                Hashtable hash 
= new Hashtable();
                hash[
"is_dir"= true;
                hash[
"has_file"= (dir.GetFileSystemInfos().Length > 0);
                hash[
"filesize"= 0;
                hash[
"is_photo"= false;
                hash[
"filetype"= "";
                hash[
"filename"= dir.Name;
                hash[
"datetime"= dir.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
                dirFileList.Add(hash);
            }
            
for (int i = 0; i < fileList.Length; i++)
            {
                FileInfo file 
= new FileInfo(fileList[i]);
                Hashtable hash 
= new Hashtable();
                hash[
"is_dir"= false;
                hash[
"has_file"= false;
                hash[
"filesize"= file.Length;
                hash[
"is_photo"= (Array.IndexOf(fileTypes.Split(','), file.Extension.Substring(1).ToLower()) >= 0);
                hash[
"filetype"= file.Extension.Substring(1);
                hash[
"filename"= file.Name;
                hash[
"datetime"= file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
                dirFileList.Add(hash);
            }
            
//Response.AddHeader("Content-Type", "application/json; charset=UTF-8");
            
//context.Response.Write(JsonMapper.ToJson(result));
            
//context.Response.End();
            return Json(result, "text/html;charset=UTF-8",JsonRequestBehavior.AllowGet);
        }

        
public class NameSorter : IComparer
        {
            
public int Compare(object x, object y)
            {
                
if (x == null && y == null)
                {
                    
return 0;
                }
                
if (x == null)
                {
                    
return -1;
                }
                
if (y == null)
                {
                    
return 1;
                }
                FileInfo xInfo 
= new FileInfo(x.ToString());
                FileInfo yInfo 
= new FileInfo(y.ToString());

                
return xInfo.FullName.CompareTo(yInfo.FullName);
            }
        }

        
public class SizeSorter : IComparer
        {
            
public int Compare(object x, object y)
            {
                
if (x == null && y == null)
                {
                    
return 0;
                }
                
if (x == null)
                {
                    
return -1;
                }
                
if (y == null)
                {
                    
return 1;
                }
                FileInfo xInfo 
= new FileInfo(x.ToString());
                FileInfo yInfo 
= new FileInfo(y.ToString());

                
return xInfo.Length.CompareTo(yInfo.Length);
            }
        }

        
public class TypeSorter : IComparer
        {
            
public int Compare(object x, object y)
            {
                
if (x == null && y == null)
                {
                    
return 0;
                }
                
if (x == null)
                {
                    
return -1;
                }
                
if (y == null)
                {
                    
return 1;
                }
                FileInfo xInfo 
= new FileInfo(x.ToString());
                FileInfo yInfo 
= new FileInfo(y.ToString());

                
return xInfo.Extension.CompareTo(yInfo.Extension);
            }
        }

        
public bool IsReusable
        {
            
get
            {
                
return true;
            }
        }
        
#endregion
    }
}
 
1.KindEditor
KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器。 KindEditor使用JavaScript编写,可以无缝的与Java、.NET、PHP、ASP等程序接合。
KindEditor非常适合在CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用,2006年7月首次发布2.0以来,KindEditor依靠出色的用户体验和领先的技术不断扩大编辑器市场占有率,目前在国内已经成为最受欢迎的编辑器之一。
主要特点
  • 快速:体积小,加载速度快。
  • 开源:开放源代码,高水平,高品质。
  • 底层:内置自定义DOM类库,精确操作DOM。
  • 扩展:基于插件的设计,所有功能都是插件,可根据需求增减功能。
  • 风格:修改编辑器风格很容易,只需修改一个CSS文件。
  • 兼容:支持大部分主流浏览器,比如IE、Firefox、Safari、Chrome、Opera。
发展历程
  • 2005年12月:kindsoft.net 网站上线
  • 2006年07月:KindEditor 2.0 发布
  • 2009年01月:KindEditor 3.0 发布
使用许可
KindEditor源代码默认在LGPL开源协议下发布,免费使用KindEditor必须遵守LGPL协议。
同时,KindEditor为商业用户准备了商业闭源协议,获得商业授权之后,可以摆脱开源协议的严格约束,非常适合在各类商业程序中使用。

LGPL开源协议概要:
  • 您可以自由使用、修改、分发源代码,但要符合开源精神。
  • 源代码的版权归KindEditor开发团队所有,无论修改程度如何,您不得拥有对源代码的版权。
  • 如果有人向您要编辑器源代码,您有义务提供修改后的源代码。
  • 最好在您的网站或程序上添加KindEditor官方网站链接。
LGPL协议原文:GNU Lesser General Public License 2.1

如果您不想遵守LGPL协议,或不清楚LGPL开源协议与商业闭源协议的区别,请点击这里了解详情。
本文章仅供参考!!!!!!
2012新款秋冬装超大奢华毛领羽绒服 女 修身中长款潮正品反季清仓
原文地址:https://www.cnblogs.com/stalwart/p/1830772.html