zoukankan      html  css  js  c++  java
  • ueditor+复制word图片粘贴上传

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧
    Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能。但是无法处理多张图片。而且转换成BASE64后是作为内容一起提交给服务器,不能够将图片单独保存在另外一台服务器中。如果需要单独保存则需要自已进行处理。比较麻烦。

    我希望打开Word或者WPS文档后,复制内容然后直接粘贴到富文本编辑器中,编辑器自动将图片批量上传到服务器中,无论文档中有多少张图片,编辑器都全部自动上传,不需要再手动一张张处理。同时能够将图片上传到我指定的接口中,服务器需要将图片单独保存在存储服务器中,比如可能是云存储,或者是分布式存储,最后直接发布内容。

    感觉这个似乎很困难,因为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中所有的图片,真的是太方便了。无论多少张图片都可以一次性批量上传。这个功能真的是太方便了,大幅度提升了内容编辑人员的效率。以前一天只能发布一篇文章,现在能够发布100篇,这效率简直提升了100倍呀。

     

    图片上传后保存在服务器端。而且也可以指定上传接口地址,这个也比较方便。因为我们的业务是将图片保存在单独的云存储服务器中。

     

    3、处理ueditor提供的uploadimage方法

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

    有需要的朋友可以下载:http://blog.ncmem.com/wordpress/2019/08/07/ueditor%e5%a4%8d%e5%88%b6word%e5%9b%be%e7%89%87%e7%b2%98%e8%b4%b4%e4%b8%8a%e4%bc%a0-2/

  • 相关阅读:
    CSS权重
    object.create(null) 和 {}创建对象的区别
    CSS边框作图
    细说HTML头部标签
    利用a标签导出csv文件
    细说CSS伪类和伪元素
    HTML标签的权重
    《SPA设计与架构》之客户端路由
    《SPA设计与架构》之JavaScript模块化
    《SPA设计与架构》之MV*框架
  • 原文地址:https://www.cnblogs.com/songsu/p/11304155.html
Copyright © 2011-2022 走看看