tinymce 插件不提供免费的本地图片上传功能,所以自己将uploadify这个上传插件整合到tinymce,实现本地上传,还用到了jquery.ui插件,先展示全部的代码

  1. @model TinyMCEUpload.Models.TinyMCEModels
  2. <script type="text/javascript">
  3. $(document).ready(function () {
  4. var tinymceEditor;
  5. tinymce.init({
  6. selector: "textarea#content",
  7. auto_focus: "content",
  8. language: "zh_CN",
  9. theme: "modern",
  10. plugins: [
  11. "advlist autolink lists link image charmap preview",
  12. "searchreplace visualblocks fullscreen",
  13. "insertdatetime media table contextmenu paste",
  14. "emoticons textcolor"
  15. ],
  16. toolbar1: "undo redo | styleselect | fontselect | fontsizeselect | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent",
  17. toolbar2: "fullscreen preview | forecolor backcolor emoticons | table | link image media | mybutton",
  18. setup: function (editor) {
  19. editor.addButton('mybutton', {
  20. text: '上传图片',
  21. icon: false,
  22. onclick: function () {
  23. tinymceEditor = editor;
  24. $("#uploadofedit").dialog({
  25. modal: true,
  26. resizable: false,
  27. width: ,
  28. height: ,
  29. dialogClass: "mceuploadify"
  30. });
  31. }
  32. });
  33. },
  34. //TinyMCE 会将所有的 font 元素转换成 span 元素
  35. convert_fonts_to_spans: true,
  36. //换行符会被转换成 br 元素
  37. convert_newlines_to_brs: false,
  38. //在换行处 TinyMCE 会用 BR 元素而不是插入段落
  39. force_br_newlines: false,
  40. //当返回或进入 Mozilla/Firefox 时,这个选项可以打开/关闭段落的建立
  41. force_p_newlines: false,
  42. //这个选项控制是否将换行符从输出的 HTML 中去除。选项默认打开,因为许多服务端系统将换行转换成 <br />,因为文本是在无格式的 textarea 中输入的。使用这个选项可以让所有内容在同一行。
  43. remove_linebreaks: false,
  44. //不能把这个设置去掉,不然图片路径会出错
  45. relative_urls: false,
  46. //不允许拖动大小
  47. resize: false,
  48.  
  49. font_formats: "宋体=宋体;黑体=黑体;仿宋=仿宋;楷体=楷体;隶书=隶书;幼圆=幼圆;Arial=arial,helvetica,sans-serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",
  50. fontsize_formats: "8pt 10pt 12pt 14pt 18pt 24pt 36pt"
  51. });
  52.  
  53. $("#tinymceuploadify").uploadify({
  54. 'swf': '../../uploadify/uploadify.swf',
  55. 'buttonText': '上传本地图片',
  56. 'uploader': '/Home/Upload',
  57. 'auto': true,
  58. 'method': 'post',
  59. 'multi': false,
  60. 'onUploadSuccess': function (event, data, flag) {
  61. var img = "<img src='../../File/" + data + "'>";
  62. tinymceEditor.insertContent(img);
  63. setTimeout(function () {
  64. $("#uploadofedit").dialog('close');
  65. }, );
  66. },
  67. 'onUploadError': function () {
  68. setTimeout(function () {
  69. $("#uploadofedit").dialog('close');
  70. }, );
  71. alert("上传失败");
  72. }
  73. });
  74. });
  75. </script>
  76. <div>
  77. <form method="post" action="/Home/Test">
  78. <textarea id="content" name="content" style="width: 100%; height: 600px;"></textarea>
  79. <input type="submit" value="提交" />
  80. </form>
  81. </div>
  82. <div id='uploadofedit' style="display: none;">
  83. <input type='file' name='tinymceuploadify' id='tinymceuploadify' />
  84. <label>只能上传单张10M以下的 pngjpggif 格式的图片</label>
  85. </div>

接下来分步骤来分析

1  先实现在tinymce插件上添加自定义按钮

  1. toolbar2: " mybutton",
  2. setup: function (editor) {
  3. editor.addButton('mybutton', {
  4. text: '上传图片',
  5. icon: false,
  6. onclick: function () {
  7.  
  8. });
  9. }
  10. });
  11. },

2.初始化uploadify插件

  1. $("#tinymceuploadify").uploadify({
  2. 'swf': '../../uploadify/uploadify.swf',
  3. 'buttonText': '上传本地图片',
  4. 'uploader': '/Home/Upload',
  5. 'auto': true,
  6. 'method': 'post',
  7. 'multi': false,
  8. 'onUploadSuccess': function (event, data, flag) {
  9. var img = "<img src='../../File/" + data + "'>";
  10. tinymceEditor.insertContent(img);
  11. setTimeout(function () {
  12. $("#uploadofedit").dialog('close');
  13. }, );
  14. },
  15. 'onUploadError': function () {
  16. setTimeout(function () {
  17. $("#uploadofedit").dialog('close');
  18. }, );
  19. alert("上传失败");
  20. }
  21. });

3.在点击自定义按钮后启用jquery-ui的dialog插件调出上传对话框

  1. setup: function (editor) {
  2. editor.addButton('mybutton', {
  3. text: '上传图片',
  4. icon: false,
  5. onclick: function () {
  6. tinymceEditor = editor;
  7. $("#uploadofedit").dialog({
  8. modal: true,
  9. resizable: false,
  10. width: ,
  11. height: ,
  12. dialogClass: "mceuploadify"
  13. });
  14. }
  15. });
  16. }

至此前台部分OK了,接下来是后台

1.后台接收用户上传的图片

  1. [HttpPost]
  2. public ContentResult Upload(HttpPostedFileBase Filedata)
  3. {
  4. string result = string.Empty;
  5. string folder = Server.MapPath("~/File/");
  6. string time = DateTime.Now.ToString("yyyyMMddHHmmssff");//获取时间
  7. string extension = System.IO.Path.GetExtension(Filedata.FileName);//获取扩展名
  8. string newFileName = time + extension;//重组成新的文件名
  9. if (!System.IO.Directory.Exists(folder))
  10. System.IO.Directory.CreateDirectory(folder);
  11.  
  12. Filedata.SaveAs(folder + "\\" + newFileName);
  13.  
  14. return Content(newFileName);
  15. }

2.接收tinymce插件的内容(我这里简单的用记事本来替代数据库),然后再从记事本中把内容读出来呈现到另一个页面上

  1. /// <summary>
  2. /// 接收tinymce插件的内容
  3. /// </summary>
  4. /// <param name="model"></param>
  5. /// <returns></returns>
  6. public ActionResult Test(TinyMCEModels model)
  7. {
  8. var path = Server.MapPath("~/File/123.txt");
  9. var str = System.IO.File.ReadAllText(path);
  10. if (System.IO.File.Exists(path))
  11. {
  12. System.IO.File.Delete(path);
  13. }
  14.  
  15. System.IO.File.WriteAllText(path, model.content);
  16.  
  17. return RedirectToAction("Show");
  18. }
  19.  
  20. /// <summary>
  21. /// 将记事本的内容读出来,重新加载到页面上
  22. /// </summary>
  23. /// <returns></returns>
  24. public ActionResult Show()
  25. {
  26. var str = System.IO.File.ReadAllText(Server.MapPath("~/File/123.txt"));
  27. ViewBag.str = str.Trim();
  28. return View();
  29. }

因为在mvc4中为了防止脚本攻击,默认是不允许有html标记的内容传到后台的,所以我建立了一个TinyMCEModels,在content属性上加上AllowHtml标记(在System.Web.Mvc命名空间下),这样就行了

  1. public class TinyMCEModels
  2. {
  3. [AllowHtml]
  4. public string content { get; set; }
  5. }

源码  http://files.cnblogs.com/guzhehang/TinyMCEUpload.rar

ASP.NET MVC4实现TinyMCE 4.0.20自定义上传功能的更多相关文章

  1. asp.net core 如何集成kindeditor并实现图片上传功能

     准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本  目录 新建asp.net core web项目 下载kindeditor ...

  2. django下的ckeditor 5.0 文本编辑器上传功能。

    完整的后台界面怎么可以没有文本编辑器,但是django的admin界面很疑惑,没有自带文本编辑器,好在网上有不少成型的库可以用 我用的是ckeditor编辑器,安装和配置我引用别人的博客 这篇博客配置 ...

  3. spring mvc 3.0 实现文件上传功能

    http://club.jledu.gov.cn/?uid-5282-action-viewspace-itemid-188672 —————————————————————————————————— ...

  4. Servlet3.0的文件上传功能

    在Servlet3.0之前,文件上传需要借助于第三方插件,在Servlet3.0之后,Servlet本身开始支持文件上传功能. 获取上传的文件可以通过HTTPServletRequest的getPar ...

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

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

  6. mvc4 强大的导出和不需要上传文件的批量导入EXCEL--SNF快速开发平台3.1

    数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,但在Web上我们应该如何实现呢?本文主要介绍利用MVC4+EasyUI的特点,并结合文件上传控件,实现文 ...

  7. ASP.NET CORE使用WebUploader对大文件分片上传,并通过ASP.NET CORE SignalR实时反馈后台处理进度给前端展示

    本次,我们来实现一个单个大文件上传,并且把后台对上传文件的处理进度通过ASP.NET CORE SignalR反馈给前端展示,比如上传一个大的zip压缩包文件,后台进行解压缩,并且对压缩包中的文件进行 ...

  8. Servlet3.0学习总结(三)——基于Servlet3.0的文件上传

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...

  9. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

    效果图 上传文件页面: 下载文件页面:  1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="tr ...

随机推荐

  1. 掀起你的盖头来:Unit Of Work-工作单元

    写在前面 阅读目录: 概念中的理解 代码中的实现 后记 掀起了你的盖头来,让我看你的眼睛,你的眼睛明又亮呀,好像那水波一模样:掀起了你的盖头来,让我看你的脸儿,看看你的脸儿红又圆呀,好像那苹果到秋天. ...

  2. 2013 duilib入门简明教程 -- 前言(1)

        关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面进入正题:     不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘. ...

  3. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  4. Java 对象引用方式 —— 强引用、软引用、弱引用和虚引用

    Java中负责内存回收的是JVM.通过JVM回收内存,我们不需要像使用C语音开发那样操心内存的使用,但是正因为不用操心内存的时候,也会导致在内存回收方面存在不够灵活的问题.为了解决内存操作不灵活的问题 ...

  5. 使用Ado.net执行SP很慢,而用SSMS执行很快

    今天遇到一个问题,有用户反应,在site上打开报表,一直loading,出不来结果. 遇到这种问题,我立刻simulate用户使用Filter Condition,问题repro,看来不是偶然事件,通 ...

  6. win7+IIS7下木有4.0框架问题的解决方案

  7. OpenCASCADE PCurve of Topological Face

    OpenCASCADE PCurve of Topological Face eryar@163.com Abstract. OpenCASCADE provides a class BRepBuil ...

  8. A Simple OpenCASCADE Qt Demo-occQt

    A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...

  9. CSS样式之优先级

    说到到css的样式优先级,今天偶再来回顾下,从css的样式优先级可分为两个部分: 1.从CSS代码放置的位置看权重优先级:     内联样式 > 内部嵌入样式 >外联样式 2.从样式选择器 ...

  10. MySQL分区表的管理~2

    一.维护分区 对于表的维护,我们一般有如下几种方式: CHECK TABLE, OPTIMIZE TABLE, ANALYZE TABLE和REPAIR TABLE. 而这几种方式,对于分区同样适用. ...