kindeditor-4.1.10 结合 Asp.Net MVC 添加图片功能

  KindEditor是一套开源的HTML可视化编辑器,现在我要结合Asp.Net MVC4 上传图片功能,做相应的配置和修改,

其实网上也有人写过类似的文章了,我写出来是以防以后使用的时候出现这样的问题,所以收集起来做参考之用,

如果有人遇到这样的问题,可以和我一起交流,qq号在我博客上已经贴出来了。

下面就开始贴出我的源代码:

js:

var keditor;
var koption = {
    allowFileManager: true, //是否可以浏览上传文件
    allowUpload: true, //是否可以上传
    fileManagerJson: '/KindEditor/ProcessRequest', //浏览文件方法
    uploadJson: '/KindEditor/UploadImage'//上传文件方法(注意这两个路径)
};

KindEditor.ready(function (k) {
    keditor = k.create('#content-js', koption);
    prettyPrint();
});

function btn_submit() {
    var lables = '';
    var title = $("#txt_title").val();
    if (title.length == 0 || keditor.isEmpty()) {
        alert("标题或内容为空!");
        return false;
    }
    $("input[name=lable]:checked").each(function () {
        lables += $(this).val() + ',';
    }); ;
    zwobj.url = "/Manage/AddArticle";
    zwobj.data = { title: title,
        content: encodeURI(keditor.html()),
        lables: lables.substr(0, lables.length - 1)
    };
    ajaxData();
    return true;
}

  aspx:

<%@ Page Language="C#" EnableEventValidation="false" ValidateRequest="false" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<%@ Import Namespace="MyMvc4Project.Dal.Views" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <meta name="viewport" content="width=device-width" />
    <title>NewArticle</title>
    <link href="../../Scripts/kindeditor-4.1.10/themes/default/default.css" rel="stylesheet"
        type="text/css" />
    <link href="../../Scripts/kindeditor-4.1.10/plugins/code/prettify.css" rel="stylesheet"
        type="text/css" />
    <link href="../../Scripts/Lib/Manage/Manage.css" rel="stylesheet" type="text/css" />
    <script src="../../Scripts/jquery/jquery-1.8.3.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery/jquery.form.js" type="text/javascript"></script>
    <script src="../../Scripts/kindeditor-4.1.10/kindeditor-all-min.js" type="text/javascript"></script>
    <script src="../../Scripts/kindeditor-4.1.10/lang/zh_CN.js" type="text/javascript"></script>
    <script src="../../Scripts/kindeditor-4.1.10/plugins/code/code.js" type="text/javascript"></script>
    <script src="../../Scripts/kindeditor-4.1.10/plugins/code/prettify.js" type="text/javascript"></script>
   <script src="../../Scripts/zwjs.js" type="text/javascript"></script>
    <script src="../../Scripts/Lib/Manage/NewArticle.js" type="text/javascript"></script>
</head>
<body>
    <div class="kedit">
        <form id="form-article" name="form-article" method="POST">
        <p>
            标题:</p>
        <input type="text" id="txt_title" name="title" />
        <p>
            正文:</p>
        <textarea id="content-js" name="content"></textarea>
        <p>
            <% var lable = ViewData["lable"] as IList<LableView>;
               if (lable != null && lable.Count != 0)
               {
                   %>
                   <p>标签:</p>
                   <%
                   foreach (var view in lable)
                   {%>
            <input class="chk-lable" name="lable" type="checkbox" value="<%= view.Name %>" ><%= view.Name %></input>
            <%} %>
            <% }
               else
               { %>
               <p>无标签</p>
            <% } %>
        </p>
        <p>
            <input id="btn-submit" type="submit" value="发布" onclick="btn_submit()" />
            <input id="btn-cancel" type="button" value="取消" /></p>
        </form>
    </div>
</body>
</html>

 XXXController.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using NHibernate;
using System.Web.Mvc;
using MyMvc4Project.Infrastructure.Helpers;
using MyMvc4Project.Dal.Implementation;
using MyMvc4Project.Service;

namespace MyMvc4Project.Controllers
{
    public class KindEditorController : Controller
    {
        [HttpPost]
        public ActionResult UploadImage()
        {
            string savePath = "/UploadImages/";
            string saveUrl = "/UploadImages/";
            string fileTypes = "gif,jpg,jpeg,png,bmp";
            int maxSize = 1000000;

            Hashtable hash = new Hashtable();

            HttpPostedFile file = System.Web.HttpContext.Current.Request.Files["imgFile"];
            if (file == null)
            {
                hash = new Hashtable();
                hash["error"] = 1;
                hash["message"] = "请选择文件";
                return Json(hash, "text/html;charset=UTF-8");
            }

            string dirPath = System.Web.HttpContext.Current.Server.MapPath(savePath);
            if (!Directory.Exists(dirPath))
            {
                hash = new Hashtable();
                hash["error"] = 1;
                hash["message"] = "上传目录不存在";
                return Json(hash, "text/html;charset=UTF-8");
            }

            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"] = 1;
                hash["message"] = "上传文件大小超过限制";
                return Json(hash, "text/html;charset=UTF-8");
            }

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

            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");
        }

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

            //根目录路径,相对路径
            String rootPath = "/UploadImages/";
            //根目录URL,可以指定绝对路径,
            String rootUrl = "/UploadImages/";
            //图片扩展名
            String fileTypes = "gif,jpg,jpeg,png,bmp";

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

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

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

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

  

总结:

  要注意

var koption = {
allowFileManager: true, //是否可以浏览上传文件
allowUpload: true, //是否可以上传
fileManagerJson: '/KindEditor/ProcessRequest', //浏览文件方法
uploadJson: '/KindEditor/UploadImage'//上传文件方法(注意这两个路径)
};

的配置,尤其是fileManagerJson和uploadJson的地址写法,最后就是关于

hash = new Hashtable();
hash["success"] = true;
hash["url"] = fileUrl;
hash["msg"] = "上传成功";
return Json(hash, "text/html;charset=UTF-8");

hashtable 返回时的参数写法

如果是失败的话,当然要返回hash["error"]=1,这些你都要注意。

时间: 2024-09-17 22:08:45

kindeditor-4.1.10 结合 Asp.Net MVC 添加图片功能的相关文章

请问asp .net mvc 添加图片路径 是在哪里添加? 视图 还是模型 还是控制器

问题描述 请问asp .net mvc 添加图片路径 是在哪里添加? 视图 还是模型 还是控制器 rt 请问asp .net mvc 添加图片路径 是在哪里添加? 视图 还是模型 还是控制器

Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点

引子 本文将主要演示怎么将多个Asp.Net MVC项目部署到一个IIS站点中的例子,主要使用的是Asp.Net MVC提供的区域的功能. Asp.Net MVC提供了区域的功能,可以很方便的为大型的网站划分区域.可以让我们的项目不至于太复杂而导致管理混乱,有了区域后,每个模块的页面都放入相应的区域内进行管理很方便.而随着项目的复杂,每个开发人员开发的模块呢也可能是一个完整的解决方案,而他要开发的UI项目呢只是主站点项目的一个区域,而如果把所有的UI项目放到一个UI项目,在团队开发时就不很方便了

asp+fso在线管理图片功能[原创]_应用技巧

复制代码 代码如下: <% '--------------------------------------------- '##############20060528新增加了对端口的支持 '作者:dxy QQ:461478385 Email:douxy001@gmail.com '功能完善 %> <!--#include file="global.asp"--> <!--#include file="session.asp"-->

asp+fso在线管理图片功能 原创

复制代码 代码如下: <% '--------------------------------------------- '##############20060528新增加了对端口的支持 '作者:dxy QQ:461478385 Email:douxy001@gmail.com '功能完善 %> <!--#include file="global.asp"--> <!--#include file="session.asp"-->

了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult &amp; JsonResult

在之前的两篇文章(<EmptyResult & ContentResult>和<FileResult>)我们剖析了EmptyResult.ContentResult和FileResult这三种ActionResult是如何将Action执行的结果响应给客户端的.本篇文章着重介绍在进行Ajax调用中经常使用的两个ActionResult,即JavaScriptResult和JsonResult.[本文已经同步到<How ASP.NET MVC Works?>中]

ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个系列,可能要很长时间吧,但是我肯定会一直坚持,如果我哪里写的不好欢迎大家指出我们共同学习,而且我理解的也不是很透彻,所以我想在写这样一遍

【译】ASP.NET MVC 5 教程 - 10:添加验证

原文:[译]ASP.NET MVC 5 教程 - 10:添加验证 在本节中,我们将为Movie模型添加验证逻辑,并确认验证规则在用户试图使用程序创建和编辑电影时有效. DRY 原则 ASP.NET MVC 的一个核心原则是DRY(Don't Repeat Yourself - 不做重复的事情).ASP.NET MVC 鼓励你一次性的指定功能或行为,然后应用程序的其它地方通过映射得到它,这样一来就减少了大量的代码,从而减少了出错误的可能性,并且更易于维护. ASP.NET  MVC  和 Enti

返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API

原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API [索引页][源码下载] 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 4.0 新特性之 Web API 开发一个 CRUD 的 Demo,服务端用 Web API,并使其支持 jsonp 协议,客户端用 jQuery 示例1.自定义一个 JsonMe

ASP.NET MVC 音乐商店 - 10. 完成导航和站点的设计

转自 http://www.cnblogs.com/haogj/archive/2011/11/20/2255680.html 我们已经完成了网站的大部分工作,但是,还有一些添加到站点的导航功能,主页,以及商店的浏览页面. 创建购物车汇总部分视图 我们希望在整个站点的页面上都可以看到购物车中的数量.                         通过创建一个部分视图,然后添加到网站的布局中就可以容易地完成, 前面看到,在 ShoppingCart 控制器中包含了一个名为 CartSummary