ASP.NET MVC4实现TinyMCE 4.0.20自定义上传功能
tinymce 插件不提供免费的本地图片上传功能,所以自己将uploadify这个上传插件整合到tinymce,实现本地上传,还用到了jquery.ui插件,先展示全部的代码
- @model TinyMCEUpload.Models.TinyMCEModels
- <script type="text/javascript">
- $(document).ready(function () {
- var tinymceEditor;
- tinymce.init({
- selector: "textarea#content",
- auto_focus: "content",
- language: "zh_CN",
- theme: "modern",
- plugins: [
- "advlist autolink lists link image charmap preview",
- "searchreplace visualblocks fullscreen",
- "insertdatetime media table contextmenu paste",
- "emoticons textcolor"
- ],
- toolbar1: "undo redo | styleselect | fontselect | fontsizeselect | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent",
- toolbar2: "fullscreen preview | forecolor backcolor emoticons | table | link image media | mybutton",
- setup: function (editor) {
- editor.addButton('mybutton', {
- text: '上传图片',
- icon: false,
- onclick: function () {
- tinymceEditor = editor;
- $("#uploadofedit").dialog({
- modal: true,
- resizable: false,
- width: ,
- height: ,
- dialogClass: "mceuploadify"
- });
- }
- });
- },
- //TinyMCE 会将所有的 font 元素转换成 span 元素
- convert_fonts_to_spans: true,
- //换行符会被转换成 br 元素
- convert_newlines_to_brs: false,
- //在换行处 TinyMCE 会用 BR 元素而不是插入段落
- force_br_newlines: false,
- //当返回或进入 Mozilla/Firefox 时,这个选项可以打开/关闭段落的建立
- force_p_newlines: false,
- //这个选项控制是否将换行符从输出的 HTML 中去除。选项默认打开,因为许多服务端系统将换行转换成 <br />,因为文本是在无格式的 textarea 中输入的。使用这个选项可以让所有内容在同一行。
- remove_linebreaks: false,
- //不能把这个设置去掉,不然图片路径会出错
- relative_urls: false,
- //不允许拖动大小
- resize: false,
- 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",
- fontsize_formats: "8pt 10pt 12pt 14pt 18pt 24pt 36pt"
- });
- $("#tinymceuploadify").uploadify({
- 'swf': '../../uploadify/uploadify.swf',
- 'buttonText': '上传本地图片',
- 'uploader': '/Home/Upload',
- 'auto': true,
- 'method': 'post',
- 'multi': false,
- 'onUploadSuccess': function (event, data, flag) {
- var img = "<img src='../../File/" + data + "'>";
- tinymceEditor.insertContent(img);
- setTimeout(function () {
- $("#uploadofedit").dialog('close');
- }, );
- },
- 'onUploadError': function () {
- setTimeout(function () {
- $("#uploadofedit").dialog('close');
- }, );
- alert("上传失败");
- }
- });
- });
- </script>
- <div>
- <form method="post" action="/Home/Test">
- <textarea id="content" name="content" style="width: 100%; height: 600px;"></textarea>
- <input type="submit" value="提交" />
- </form>
- </div>
- <div id='uploadofedit' style="display: none;">
- <input type='file' name='tinymceuploadify' id='tinymceuploadify' />
- <label>只能上传单张10M以下的 png、jpg、gif 格式的图片</label>
- </div>
接下来分步骤来分析
1 先实现在tinymce插件上添加自定义按钮
- toolbar2: " mybutton",
- setup: function (editor) {
- editor.addButton('mybutton', {
- text: '上传图片',
- icon: false,
- onclick: function () {
- });
- }
- });
- },
2.初始化uploadify插件
- $("#tinymceuploadify").uploadify({
- 'swf': '../../uploadify/uploadify.swf',
- 'buttonText': '上传本地图片',
- 'uploader': '/Home/Upload',
- 'auto': true,
- 'method': 'post',
- 'multi': false,
- 'onUploadSuccess': function (event, data, flag) {
- var img = "<img src='../../File/" + data + "'>";
- tinymceEditor.insertContent(img);
- setTimeout(function () {
- $("#uploadofedit").dialog('close');
- }, );
- },
- 'onUploadError': function () {
- setTimeout(function () {
- $("#uploadofedit").dialog('close');
- }, );
- alert("上传失败");
- }
- });
3.在点击自定义按钮后启用jquery-ui的dialog插件调出上传对话框
- setup: function (editor) {
- editor.addButton('mybutton', {
- text: '上传图片',
- icon: false,
- onclick: function () {
- tinymceEditor = editor;
- $("#uploadofedit").dialog({
- modal: true,
- resizable: false,
- width: ,
- height: ,
- dialogClass: "mceuploadify"
- });
- }
- });
- }
至此前台部分OK了,接下来是后台
1.后台接收用户上传的图片
- [HttpPost]
- public ContentResult Upload(HttpPostedFileBase Filedata)
- {
- string result = string.Empty;
- string folder = Server.MapPath("~/File/");
- string time = DateTime.Now.ToString("yyyyMMddHHmmssff");//获取时间
- string extension = System.IO.Path.GetExtension(Filedata.FileName);//获取扩展名
- string newFileName = time + extension;//重组成新的文件名
- if (!System.IO.Directory.Exists(folder))
- System.IO.Directory.CreateDirectory(folder);
- Filedata.SaveAs(folder + "\\" + newFileName);
- return Content(newFileName);
- }
2.接收tinymce插件的内容(我这里简单的用记事本来替代数据库),然后再从记事本中把内容读出来呈现到另一个页面上
- /// <summary>
- /// 接收tinymce插件的内容
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- public ActionResult Test(TinyMCEModels model)
- {
- var path = Server.MapPath("~/File/123.txt");
- var str = System.IO.File.ReadAllText(path);
- if (System.IO.File.Exists(path))
- {
- System.IO.File.Delete(path);
- }
- System.IO.File.WriteAllText(path, model.content);
- return RedirectToAction("Show");
- }
- /// <summary>
- /// 将记事本的内容读出来,重新加载到页面上
- /// </summary>
- /// <returns></returns>
- public ActionResult Show()
- {
- var str = System.IO.File.ReadAllText(Server.MapPath("~/File/123.txt"));
- ViewBag.str = str.Trim();
- return View();
- }
因为在mvc4中为了防止脚本攻击,默认是不允许有html标记的内容传到后台的,所以我建立了一个TinyMCEModels,在content属性上加上AllowHtml标记(在System.Web.Mvc命名空间下),这样就行了
- public class TinyMCEModels
- {
- [AllowHtml]
- public string content { get; set; }
- }
源码 http://files.cnblogs.com/guzhehang/TinyMCEUpload.rar
ASP.NET MVC4实现TinyMCE 4.0.20自定义上传功能的更多相关文章
- asp.net core 如何集成kindeditor并实现图片上传功能
准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本 目录 新建asp.net core web项目 下载kindeditor ...
- django下的ckeditor 5.0 文本编辑器上传功能。
完整的后台界面怎么可以没有文本编辑器,但是django的admin界面很疑惑,没有自带文本编辑器,好在网上有不少成型的库可以用 我用的是ckeditor编辑器,安装和配置我引用别人的博客 这篇博客配置 ...
- spring mvc 3.0 实现文件上传功能
http://club.jledu.gov.cn/?uid-5282-action-viewspace-itemid-188672 —————————————————————————————————— ...
- Servlet3.0的文件上传功能
在Servlet3.0之前,文件上传需要借助于第三方插件,在Servlet3.0之后,Servlet本身开始支持文件上传功能. 获取上传的文件可以通过HTTPServletRequest的getPar ...
- 在ASP.NET项目中使用CKEditor +CKFinder实现图片上传功能
前言 之前的项目中一直使用的是FCKeditor,昨天突然有个想法:为什么不试一下新的CKEditor呢?于是花了大半天的时间去学习它的用法,现在把我的学习过程与大家分享一下. 谈起FCKeditor ...
- mvc4 强大的导出和不需要上传文件的批量导入EXCEL--SNF快速开发平台3.1
数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,但在Web上我们应该如何实现呢?本文主要介绍利用MVC4+EasyUI的特点,并结合文件上传控件,实现文 ...
- ASP.NET CORE使用WebUploader对大文件分片上传,并通过ASP.NET CORE SignalR实时反馈后台处理进度给前端展示
本次,我们来实现一个单个大文件上传,并且把后台对上传文件的处理进度通过ASP.NET CORE SignalR反馈给前端展示,比如上传一个大的zip压缩包文件,后台进行解压缩,并且对压缩包中的文件进行 ...
- Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...
- 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
效果图 上传文件页面: 下载文件页面: 1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="tr ...
随机推荐
- 掀起你的盖头来:Unit Of Work-工作单元
写在前面 阅读目录: 概念中的理解 代码中的实现 后记 掀起了你的盖头来,让我看你的眼睛,你的眼睛明又亮呀,好像那水波一模样:掀起了你的盖头来,让我看你的脸儿,看看你的脸儿红又圆呀,好像那苹果到秋天. ...
- 2013 duilib入门简明教程 -- 前言(1)
关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面进入正题: 不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘. ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- Java 对象引用方式 —— 强引用、软引用、弱引用和虚引用
Java中负责内存回收的是JVM.通过JVM回收内存,我们不需要像使用C语音开发那样操心内存的使用,但是正因为不用操心内存的时候,也会导致在内存回收方面存在不够灵活的问题.为了解决内存操作不灵活的问题 ...
- 使用Ado.net执行SP很慢,而用SSMS执行很快
今天遇到一个问题,有用户反应,在site上打开报表,一直loading,出不来结果. 遇到这种问题,我立刻simulate用户使用Filter Condition,问题repro,看来不是偶然事件,通 ...
- win7+IIS7下木有4.0框架问题的解决方案
- OpenCASCADE PCurve of Topological Face
OpenCASCADE PCurve of Topological Face eryar@163.com Abstract. OpenCASCADE provides a class BRepBuil ...
- A Simple OpenCASCADE Qt Demo-occQt
A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...
- CSS样式之优先级
说到到css的样式优先级,今天偶再来回顾下,从css的样式优先级可分为两个部分: 1.从CSS代码放置的位置看权重优先级: 内联样式 > 内部嵌入样式 >外联样式 2.从样式选择器 ...
- MySQL分区表的管理~2
一.维护分区 对于表的维护,我们一般有如下几种方式: CHECK TABLE, OPTIMIZE TABLE, ANALYZE TABLE和REPAIR TABLE. 而这几种方式,对于分区同样适用. ...