zoukankan      html  css  js  c++  java
  • 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,
                                 400,
                                height: 200,
                                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');
                    }, 1000);
                },
                'onUploadError': function () {
                    setTimeout(function () {
                        $("#uploadofedit").dialog('close');
                    }, 1000);
                    alert("上传失败");
                }
            });
        });
    </script>
    <div>
        <form method="post" action="/Home/Test">
            <textarea id="content" name="content" style=" 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>
    View Code

    接下来分步骤来分析

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

    toolbar2: " mybutton",
                setup: function (editor) {
                    editor.addButton('mybutton', {
                        text: '上传图片',
                        icon: false,
                        onclick: function () {
                           
                            });
                        }
                    });
                },
    View Code

    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');
                    }, 1000);
                },
                'onUploadError': function () {
                    setTimeout(function () {
                        $("#uploadofedit").dialog('close');
                    }, 1000);
                    alert("上传失败");
                }
            });
    View Code

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

    setup: function (editor) {
                    editor.addButton('mybutton', {
                        text: '上传图片',
                        icon: false,
                        onclick: function () {
                            tinymceEditor = editor;
                            $("#uploadofedit").dialog({
                                modal: true,
                                resizable: false,
                                 400,
                                height: 200,
                                dialogClass: "mceuploadify"
                            });
                        }
                    });
                }
    View Code

    至此前台部分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);
            }
    View Code

    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();
            }
    View Code

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

    public class TinyMCEModels
        {
            [AllowHtml]
            public string content { get; set; }
        }
    View Code

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

  • 相关阅读:
    更改EBSserver域名/IP
    iOS Dev (60) 怎样实现 UITextView 中的 placeHolder
    程序猿的量化交易之路(29)--Cointrader之Tick实体(16)
    美团面试中被问到的问题汇总
    汇报措辞:你懂得如何向领导汇报吗(审阅、审批、审阅、批示、查阅)?
    九月份总结
    Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1
    OLE操作Excel编译错误处理
    在 VS2008 下操作 Excel 的方法总结
    vs2008 ole excel
  • 原文地址:https://www.cnblogs.com/guzhehang/p/3629029.html
Copyright © 2011-2022 走看看