在ASP.NET中使用CKEditor编辑器,如果想控制图片上传,即把上传的图片路径名存到数据中,可以自定义一个上传功能

首先自定义CKEditor的配置文件

在config.js中添加以下代码,红色部分为增加添加图片插件语句

CKEDITOR.editorConfig = function (config) {
    // Define changes to default configuration here. For example:
    config.language = 'zh-cn';
   // config.skin = 'v2';
    config.uiColor = '#AADC6E';
    config.toolbar =
    [
       ['Source', '-', 'Preview', '-'],
        ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord'],
        ['Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'],
        '/',
        ['Bold', 'Italic', 'Underline'],
        ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent'],
        ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'],
        ['Link', 'Unlink', 'Anchor'],
        ['addpic', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak'], //此处的addpic为我们自定义的图标,非CKeditor提供。
        '/',
        ['Styles', 'Format', 'Font', 'FontSize'],
        ['TextColor', 'BGColor'],

];

config.extraPlugins = 'addpic';

};

然后需要为添加图片按钮配置图片

在./ckeditor/plugins/目录下新建一个文件夹addpic,然后在其目录下添加两个文件,一个是名叫addpic.jpg的图片,就是添加图片按钮

的图标,另一个是plugin.js,就是配置此按钮的js代码

plugin.js文件内容

(function () {
    //Section 1 : 按下自定义按钮时执行的代码
    var a = {
        exec: function (editor) {
            show();
        }
    },
    b = 'addpic';
    CKEDITOR.plugins.add(b, {
        init: function (editor) {
            editor.addCommand(b, a);
            editor.ui.addButton('addpic', {
                label: '添加图片',
                icon: this.path + 'addpic.JPG',
                command: b
            });
        }
    });
})();

现在编辑器中已经部署好了添加图片的功能图标,接下来我们就需要完成在点击它时,弹出一个上传文件的对话框,

其中弹出对话框我们使用用jquery开发的popup弹出对话框模式,所以在使用前需要加载相应的js文件

<script type="text/javascript" src="./Scripts/scripts/jquery.1.3.2.js"></script>
    <script type="text/javascript" src="./Scripts/scripts/popup_layer.js"></script>

<!--因为我们要把图片加入到编辑其中所以需要通过 CKeditor 的jsAPI来操作,因此也许要加载下面的文件-->
    <script type="text/javascript" src="./ckeditor/ckeditor.js"></script>

<!--下面的JS文件是需要我们自己写的,就是为了完成图片插入编辑器中-->

<script type="text/javascript" src="./ckeditor/addImage.js"></script>

addimage.js文件内容,也可是将其写在应用编辑器的页面test.aspx中,写成JS文件形式,如果在另个页面也需要此功能只需加载

此文件就行了,不必再复制js代码

function show() {

$("#ele6")[0].click();
}
function upimg(str) {//上传文件页面上传成功后将返回图片的完整路径名,然后我们就可以将其插入编辑其中

if (str == "undefined" || str == "") {
        return;
    }
    str = "<img src='" + str + "'></img>";
    CKEDITOR.instances.CKEditor_memo.insertHtml(str);//调用CKEditor的JS接口将图片插入
    close();
}
function close() {

$("#close6")[0].click();
}
$(document).ready(function () {
    new PopupLayer({ trigger: "#ele6", popupBlk: "#blk6", closeBtn: "#close6", useOverlay: true, offsets: { x: 50, y: 0} });
});

其中应用编辑器的页面test.aspx代码如下

具体如何部署CKEdtior官网上有许多详细介绍

这是官网上专门针对使用asp.net的部署,很详细了

http://docs.cksource.com/CKEditor_3.x/Developers_Guide/ASP.NET/Integration_Beginners

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="web.test" %>
<%@ Register assembly="CKEditor.NET" namespace="CKEditor.NET" tagprefix="CKEditor" %>
<%@ Register src="Controllers/ClassList.ascx" tagname="ClassList" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="./Scripts/scripts/jquery.1.3.2.js"></script>
    <script type="text/javascript" src="./Scripts/scripts/popup_layer.js"></script>
    <script type="text/javascript" src="./ckeditor/ckeditor.js"></script>
    <script type="text/javascript" src="./ckeditor/addImage.js"></script>
    <script type="text/javascript">

</script>
    <style type="text/css">
        #form1
        {
            width: 852px;
        }
        #TextArea1
        {
            height: 162px;
            width: 436px;
        }
    </style>
</head>
<body style="width: 908px">
    <form id="form1" runat="server">
    <div>
      <div id="ele6" style="cursor:hand; color: blue; display:none;"></div>
    <div id="blk6" class="blk" style="display:none;">
        <div class="head"><div class="head-right"></div></div>
        <div class="main">                
            <a href="javascript:void(0)"  id="close6" class="closeBtn"></a>                
            <iframe src="upimg.aspx"></iframe>                    
        </div>            
    </div>
    <div style="width: 803px">
        <br />
          <CKEditor:CKEditorControl ID="CKEditor_memo" runat="server" Height="313px"  
            Width="747px"></CKEditor:CKEditorControl>
        <br />
    </div>
    </div>
   </form>
</body>
</html>

下面是上传页面设计

前台设计upimg.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="upimg.aspx.cs" Inherits="web.upimg" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <!--
    <script type="text/javascript" src="./Scripts/scripts/jquery.1.3.2.js"></script>
    <script type="text/javascript" src="./Scripts/scripts/popup_layer.js"></script>
    -->
    <style type="text/css">
        #form1
        {
            height: 112px;
            width: 297px;
        }
    </style>
</head>
<body style="height: 120px; width: 299px;" bgcolor="White">
    <form id="form1" runat="server" style="background-color: #CEFFCE">
     <div style="height: 116px; width: 299px">
         <br />
&nbsp;&nbsp;&nbsp;
        <asp:FileUpload ID="upLoadFile" runat="server" />
         <br />
         <br />
         &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<asp:Button ID="Button1" runat="server" Text="上传" onclick="Button1_Click" />
        &nbsp;&nbsp;&nbsp;
        <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="取消" />
        &nbsp;&nbsp;
        </div>
    </form>
</body>
</html>

后台操作代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Cryptography;
using System.IO;
namespace web
{
    public partial class upimg : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

}

//点击上传按钮,如果文件路径不为空进行上传操作
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (this.upLoadFile.PostedFile.ContentLength != 0)
            {
                string imgdir = UpImg();

//调用前台JS函数,将图片插入编辑器中即我们在addpic.js写的upimg函数
                string script = "window.parent.upimg('" + imgdir + "');"

ResponseScript(script);
            }
            else
            {
                Response.Write("请选择图片");
            }
        }

//点击取消按钮,关闭弹出窗口
        protected void Button2_Click(object sender, EventArgs e)
        {
            string script = "window.parent.close();";
            ResponseScript(script);
        }
        /// <summary>
        /// 输出脚本
        /// </summary>
        public void ResponseScript(string script)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder("<script language='javascript' type='text/javascript'>");
            sb.Append(script);
            sb.Append("</script>");
            ClientScript.RegisterStartupScript(this.GetType(), RandomString(1), sb.ToString());
        }
        /// <summary>
        /// 获得随机数
        /// </summary>
        /// <param name="count">长度</param>
        /// <returns></returns>
        public static string RandomString(int count)
        {
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            byte[] data = new byte[count];
            rng.GetBytes(data);
            return BitConverter.ToString(data).Replace("-", "");
        }

//上传函数我将图片都存在了服务器根目录下的./upfile/images文件夹下
        public string UpImg()
        {
            string imgdir ="";
            if (this.upLoadFile.PostedFile.ContentLength != 0)
            {
                string fileFullName = this.upLoadFile.PostedFile.FileName;//
                int i = fileFullName.LastIndexOf(".");
                string fileType = fileFullName.Substring(i);
                if (fileType != ".gif" && fileType != ".jpg" &&
                    fileType != ".bmp" && fileType != ".jpeg" &&
                    fileType != ".png")
                {
                    Response.Write("文件格式不正确");
                    Response.End();
                }
                else
                {
                    DateTime now = DateTime.Now;
                    string newFileName = now.Millisecond + '_' + upLoadFile.PostedFile.ContentLength.ToString() + fileType;
                    upLoadFile.PostedFile.SaveAs(Server.MapPath("/upfile/images/" + newFileName));
                    imgdir = "./upfile/images/" + newFileName;
                }
            }
            return imgdir;
            
        }
    }
}

感谢一下博文博主

http://www.cnblogs.com/lts8989/archive/2011/08/04/2127326.html

http://www.cnblogs.com/dg5461/articles/1746484.html

参考代码请到我的资源中下载

CKEditor 自主控制图片上传的更多相关文章

  1. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  2. WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION 图片上传

    CKEDITOR  编辑器   图片上传 WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION (CKEditorFuncNum,图片路径,返回信息); CKEditor ...

  3. 在ASP.NET项目中使用CKEditor +CKFinder实现图片上传功能

    前言 之前的项目中一直使用的是FCKeditor,昨天突然有个想法:为什么不试一下新的CKEditor呢?于是花了大半天的时间去学习它的用法,现在把我的学习过程与大家分享一下. 谈起FCKeditor ...

  4. C#上传图片同时生成缩略图,控制图片上传大小。

    #region 上传图片生成缩略图 /// <summary> /// 上传图片 /// </summary> /// <param name="sender& ...

  5. ci 配置ckeditor + ckfinder 无图片上传按钮

    一:配置路径有问题 {$base_url}assets/js/editor/ckfinder/ckfinder.html  --> http://www.cnblogs.com/assets/j ...

  6. CKeditor如何实现图片上传功能

    http://makaiyuan.blog.51cto.com/5819595/1049521 如何在数据库中导入excel文件内的数据:http://jingyan.baidu.com/album/ ...

  7. ckedit 图片上传 php

    分享ckedit的使用.直接码出来 <input type="hidden" name="id" id="id" value=&quo ...

  8. CKEditor实现图片上传

    本人用的CKEditor版本为4.3 CKEditor配置和部署参考CKEditor4.x部署和配置. CKEditor编辑器的工具栏中初始的时候应该是这样子的,没有图片上传按钮 并且预览中有一堆火星 ...

  9. ckeditor+jsp+spring配置图片上传

    CKEditor用于富文本输入是极好的,它还有一些插件支持扩展功能,其中图片上传就是比较常用到的.本文简单记录我的实现步骤. 1.CKEditor除了提供三种标准版压缩包下载,还可根据自己的需求进行个 ...

随机推荐

  1. WinForm播放视频

    原文:WinForm播放视频 1背景 这几天一老友要求我做个小软件,在WinForm播放视频.印象中微软有个WM控件直接可以使用,晚上研究下 2实现方式 2.1微软草根 最简单的方式,是直接使用微软的 ...

  2. Webservice中使用Session、Application

    原文:Webservice中使用Session.Application 在Asp.Net 2.0里,已经能够在WebMethod里使用 Session . Application 这种服务器变量了.一 ...

  3. 微信应用号开发知识贮备之altjs官方实例初探

    天地会珠海分舵注:随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生.从获得微信应用号邀请的业内人士发出来的一张开发工具源码截图可以看到,reacjs及其相应的FLUX框架altjs很有可能会成 ...

  4. lib库实现loadrunner驱动mysql性能测试

    一.添加mysql驱动链接文件到loadrunner的bin和include目录下  以下链接为本人云盘分享,也可百度自行寻找下载源. http://yunpan.cn/cfTxbANSvipGi  ...

  5. effective C++ 札记 规定17 在单独的陈述newed对象插入智能指针

    // Test.cpp : 自定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...

  6. sql 中如何取出指定行: Row_Number

    原文:sql 中如何取出指定行: Row_Number ROW_NUMBER (Transact-SQL) USE AdventureWorks2008R2;GOWITH OrderedOrders ...

  7. 快速构建Windows 8风格应用33-构建锁屏提醒

    原文:快速构建Windows 8风格应用33-构建锁屏提醒 引言 Windows Phone(8&7.5)和Windows 8引入了锁屏概念,其实做过Windows Phone 7.5应用开发 ...

  8. JS获取字符串实际长度

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: function strLength(str) { var realLength = 0 ...

  9. INNO SETUP数据库的连接与创建

    原文:INNO SETUP数据库的连接与创建 说明一下:这块程序的前半部分在INNO SETUP的实例里面就有,而后面如果对数据库进行备份和还原在实例里面没有,在网上也不好找,是本人费了好大劲一句一句 ...

  10. qsort 排序功能 总结

    qsort包括在<stdlib.h>头文件里.此函数依据你给的比較条件进行高速排序,通过指针移动实现排序. 排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比較函数. 函数 ...