• 富文本编辑器+可粘贴word内容


    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧


    我希望打开文档doc直接复制粘贴到富文本编辑器,直接发布

    感觉这个似乎很困难,因为Ueditor本身不支持,粘贴后直接就是空白,这里面一定有原因。

    好,开始尝试UMeditor,Chrome只能获得本地路径,无法读取文件。

    https://ueditor.baidu.com/website/umeditor.html(有兴趣可以试试)

     

     

    难道就这么失败了?

    ,但是我意外发现UMeditor竟然支持粘贴word中的多张图片(仅支持IE11,不支持IE10以下版本、以及Chrome等)

    切换HTML,会看到你的图片被组织成base64

    nice,机会来了,既然IE支持复制word中的多张图片直接粘贴base64,既然有了base64我们就有办法上传转图片啦!

    那么我们来改造Ueditor,让他支持IE11(总比没得用强吧)

    打开你的ueditor.all.js(1.4.3版本以下行号根据自己使用的版本可能不同)

    1、注释掉14679行(暂时不明确有什么不良影响)

    //执行默认的处理

    //me.filterInputRule(root);

    2、在28725行插入以下代码(如果是使用IE11粘贴会得到base64,先用占位符占位,再逐个把base64专成Blob文件并上传,上传完成再替换为你的img属性src为服务器图片url)

         this.WordParser_PasteWord = function (json)

        {

             this.postType = WordPasteImgType.word;

             this.EditorContent = json.word;

             for (var i = 0, l = json.imgs.length; i < l; ++i)

             {

                 this.addImgLoc(json.imgs[i]);

             }

             this.OpenDialogFile();

         };

         this.WordParser_PasteExcel = function (json)

         {

             this.postType = WordPasteImgType.word;

             this.EditorContent = json.word;

             for (var i = 0, l = json.imgs.length; i < l; ++i)

             {

                 this.addImgLoc(json.imgs[i]);

             }

             this.OpenDialogFile();

         };

         this.WordParser_PasteHtml = function (json)

         {

             this.postType = WordPasteImgType.word;

             this.InsertHtml(json.word);//

             this.working = false;

         };

         this.WordParser_PasteFiles = function (json)

         {

             this.postType = WordPasteImgType.local;

             for (var i = 0, l = json.imgs.length; i < l; ++i)

             {

                 var task = this.addImgLoc(json.imgs[i]);

                 task.PostLocalFile = true;//

             }

             this.OpenDialogFile();

         };

         this.WordParser_PasteImage = function (json)

         {

             this.OpenDialogPaste();

             this.imgMsg.text("开始上传");

             this.imgPercent.text("1%");

         };

         this.WordParser_PasteAuto = function (json)

         {

             this.postType = WordPasteImgType.network;

             for (var i = 0, l = json.imgs.length; i < l; ++i)

             {

                 this.addImgLoc(json.imgs[i]);

             }

             this.OpenDialogFile();

         };

         this.WordParser_PostComplete = function (json)

         {

             this.imgPercent.text("100%");

             this.imgMsg.text("上传完成");

             var img = "<img src="";

             img += json.value;

             img += "" />";

             this.InsertHtml(img);

             this.CloseDialogPaste();

             this.working = false;

         };

         this.WordParser_PostProcess = function (json)

         {

             this.imgPercent.text(json.percent);

         };

         this.WordParser_PostError = function (json)

         {

             this.OpenDialogPaste();

             this.imgMsg.text(WordPasterError[json.value]);

             this.imgIco.src = this.Config["IcoError"];

             this.imgPercent.text("");

         };

         this.File_PostComplete = function (json)

         {

             var up = this.fileMap[json.id];

             up.postComplete(json);

             delete up;//

         };

         this.File_PostProcess = function (json)

         {

             var up = this.fileMap[json.id];

             up.postProcess(json);

         };

         this.File_PostError = function (json)

         {

             var up = this.fileMap[json.id];

             up.postError(json);

         };

         this.Queue_Complete = function (json)

         {

             //上传网络图片

             if (_this.postType == WordPasteImgType.network)

             {

                 _this.GetEditor().setData(json.word);

             //上传Word图片时才替换内容

             elseif (_this.postType == WordPasteImgType.word)

             {

                 _this.InsertHtml(json.word);//

             }

             this.CloseDialogFile();

             _this.working = false;

         };

         this.load_complete_edge = function (json)

         {

            _this.app.init();

        };

        this.state_change = function (json) {

            if (json.value == "parse_document")

            {

                this.OpenDialogFile();

                this.filesPanel.text("正在解析文档");

            }

            elseif (json.value == "process_data") {

                this.filesPanel.text("正在处理数据");

            }

            elseif (json.value == "process_data_end")

            {

                this.filesPanel.text("");

            }

        };

        this.load_complete = function (json)

        {

            var needUpdate = true;

            if (typeof (json.version) != "undefined")

            {

                this.setuped = true;

                if (json.version == this.Config.Version) {

                    needUpdate = false;

                }

            }

            if (needUpdate) this.need_update();

            //else { $.skygqbox.hide(); }

        };

        this.recvMessage = function (msg)

         {

             var json = JSON.parse(msg);

             if      (json.name == "Parser_PasteWord") _this.WordParser_PasteWord(json);

             elseif (json.name == "Parser_PasteExcel") _this.WordParser_PasteExcel(json);

             elseif (json.name == "Parser_PasteHtml") _this.WordParser_PasteHtml(json);

             elseif (json.name == "Parser_PasteFiles") _this.WordParser_PasteFiles(json);

             elseif (json.name == "Parser_PasteImage") _this.WordParser_PasteImage(json);

             elseif (json.name == "Parser_PasteAuto") _this.WordParser_PasteAuto(json);

             elseif (json.name == "Parser_PostComplete") _this.WordParser_PostComplete(json);

             elseif (json.name == "Parser_PostProcess") _this.WordParser_PostProcess(json);

             elseif (json.name == "Parser_PostError") _this.WordParser_PostError(json);

             elseif (json.name == "File_PostProcess") _this.File_PostProcess(json);

             elseif (json.name == "File_PostComplete") _this.File_PostComplete(json);

             elseif (json.name == "File_PostError") _this.File_PostError(json);

            elseif (json.name == "load_complete") _this.load_complete(json);

             elseif (json.name == "Queue_Complete") _this.Queue_Complete(json);

             elseif (json.name == "load_complete_edge") _this.load_complete_edge(json);

            elseif (json.name == "state_change") _this.state_change(json);

         };

    服务端上传代码

    using System;

    using System.Web;

    using System.IO;

     

    namespace WordPasterCK4

    {

        publicpartialclassupload : System.Web.UI.Page

         {

             protectedvoid Page_Load(object sender, EventArgs e)

             {

                  string fname = Request.Form["UserName"];

                  int len = Request.ContentLength;

     

                  if (Request.Files.Count > 0)

                  {

                       DateTime timeNow = DateTime.Now;

                       string uploadPath = "/upload/" + timeNow.ToString("yyyyMM") + "/" + timeNow.ToString("dd") + "/";

     

                       string folder = Server.MapPath(uploadPath);

                       //自动创建目录

                       if (!Directory.Exists(folder)) Directory.CreateDirectory(folder);

                       HttpPostedFile file = Request.Files.Get(0);

     

                    //原始文件名称,由控件自动生成。               

                    string nameOri = file.FileName;

                       string ext = Path.GetExtension(nameOri).ToLower();

     

                       string filePathSvr = Path.Combine(folder, nameOri);

     

                       Response.Write(uploadPath + nameOri);

                  }

             }

         }

    }

     

    处理后的效果,能够批量上传word中所有的图片

     

    图片上传后保存在服务器端

     

    3、处理ueditor提供的uploadimage方法

    客户已经使用半年,没有问题,非常有用,非常方便的功能

    有需要的朋友可以下载:http://blog.ncmem.com/wordpress/2019/08/07/ueditor复制word图片粘贴上传-2/

  • 相关阅读:
    数値処理
    linux使用rsync+inotify-tools+ssh实现文件实时同步
    Linux内核分析第九次作业
    Linux内核原理第八次作业
    Linux内核分析第七次作业
    Linux内核分析第六次作业
    《Linux内核原理与设计》第五周作业
    《Linux内核原理与分析》第四次作业
    Linux内核分析第三次作业
    Linux内核分析第二次作业
  • 原文地址:https://www.cnblogs.com/songsu/p/11301958.html
Copyright © 2020-2023  润新知