在线编辑器 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新款秋冬装超大奢华毛领羽绒服 女 修身中长款潮正品反季清仓

你可能感兴趣的:(kindeditor)