让富文本编辑器支持复制doc中多张图片直接粘贴上传

Posted songsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让富文本编辑器支持复制doc中多张图片直接粘贴上传相关的知识,希望对你有一定的参考价值。

让富文本编辑器支持复制doc中多张图片直接粘贴上传

 

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/

以上是关于让富文本编辑器支持复制doc中多张图片直接粘贴上传的主要内容,如果未能解决你的问题,请参考以下文章

富文本编辑器xheditor支持从word复制粘贴保留格式和图片的插件

kindeditor富文本编辑器支持从word复制粘贴保留格式和图片的插件

Word图片粘贴上传控件,直接粘贴图片到编辑器-DEDE

百度umeditor编辑器如何能实现直接粘贴把图片上传到服务器中?

Web编辑器复制粘贴图片上传

百度编辑器直接粘贴图片实现