• 在线编辑器 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新款秋冬装超大奢华毛领羽绒服 女 修身中长款潮正品反季清仓
  • 相关阅读:
    474. 一和零 (三维01背包)
    maven打包jar将本地jar包也打进去,maven本地jar包打包(转载)
    SpringBoot构建REST服务(转载)
    springdatajpa使用枚举类
    springdatajpa将实体类的List<T>转换成String入库
    自定义hivehook(二)解析血缘转载
    java设计模式之构建者模式(二)
    springdatajpa使用日期
    springdatajpa简介(转载)
    【国外框架】—— quasar项目代码结构分析
  • 原文地址:https://www.cnblogs.com/stalwart/p/1830772.html
Copyright © 2020-2023  润新知