zoukankan      html  css  js  c++  java
  • KindEditor4.1.10,支持粘贴图片(转载!)

    本人扩展了KindEditor4.1.10,使得他能够在Chrome和IE11中直接粘贴复制的图片(比如通过截图工具把图片直接保存在剪切板中),然后调用上传URL上传图片

    方法,修改kindeditor.js中的代码:

    在5825行附近大概是下面这个样子的:

    [javascript] view plain copy
     
    1. K(doc.body).bind('paste', function (e) {  
    2.     if (self.pasteType === 0) {  
    3.         e.stop();  
    4.         return;  
    5.     }  


    在第1行和第2行之间插入:

    [javascript] view plain copy
     
    1. //处理IE11,Chrome粘贴图片上传  
    2. function dopasteImg() {  
    3.     //debugger;  
    4.     var file = null;  
    5.     if (window.clipboardData) {//ie  
    6.   
    7.         if (clipboardData.files && clipboardData.files.length)//IE11  
    8.             file = clipboardData.files[0];  
    9.         else if (!clipboardData.getData("text") && !clipboardData.getData("url")) {  
    10.             alert("不能粘贴文件或图片,请使用IE11或者Chrome浏览器,或使用上传功能");  
    11.             return true;  
    12.         }  
    13.     } else {  
    14.         if (e.event.clipboardData.items)//chrome  
    15.         for (var i = 0; i < e.event.clipboardData.items.length; i++) {  
    16.             if (e.event.clipboardData.items[i].kind === "file") {  
    17.                 file = e.event.clipboardData.items[i];  
    18.                 break;  
    19.             }  
    20.         }  
    21.         if (file == null) {  
    22.   
    23.             if (!e.event.clipboardData.getData("url") && !e.event.clipboardData.getData("text")) {  
    24.                 alert("不能粘贴文件或图片,请使用IE11或者Chrome浏览器,或使用上传功能");  
    25.                 return true;  
    26.             }  
    27.         }  
    28.     }  
    29.     if (file) {  
    30.         if (!K.undef(self.allowImageUpload, true)) {  
    31.             alert("编辑器禁止上传图片,请与有关人员联系!");  
    32.             return true;  
    33.         }  
    34.         //获取File Blob  
    35.         //debugger;  
    36.         var blb;  
    37.         if (file.getAsFile) {//Chrome  
    38.             blb = file.getAsFile();  
    39.             if (blb.size === 0) {  
    40.                 alert("不能获取剪切板中的" + (file.type.indexOf("image/") === 0 ? "图像" : "文件")  
    41.                           +" 如果是从OutLook中复制的,请换其他程序,如Word");  
    42.                 return true;  
    43.             }  
    44.             sendfile(blb, file.type);  
    45.         } else {  
    46.             var fr = new FileReader();  
    47.             if (fr.readAsArrayBuffer) {//ie  
    48.   
    49.   
    50.                 fr.onloadend = function (evt) {  
    51.                     blb = evt.target.result;  
    52.                     sendfile(blb, file.type);  
    53.                 }  
    54.   
    55.                 fr.readAsArrayBuffer(file);  
    56.             }  
    57.         }  
    58.         function sendfile(b, t) {  
    59.               
    60.             var xhr = new XMLHttpRequest();  
    61.             var formData = new FormData();  
    62.             var isImg = t.indexOf("image/") === 0;  
    63.             //formData.append('imgFile', file,"untitled." + t.split('/')[1]);  
    64.             //formData.append('imgFile', b);  
    65.             var myBlob = new Blob([b], { "type": t });  
    66.             formData.append('imgFile', myBlob, "untitled." + t.split('/')[1]);  
    67.             //formData.append('imgFile', b);  
    68.             formData.append('dir', isImg ? 'image' : 'file');  
    69.             xhr.open('POST', self.uploadJson);  
    70.             xhr.onreadystatechange = function () {  
    71.                 if (xhr.readyState == 4&&xhr.status == 200) {  
    72.                     // if (fn) {  
    73.                     var data = _trim(xhr.responseText);  
    74.                     //if (dataType == 'json') {  
    75.                     data = _json(data);  
    76.                     if (data.error) {  
    77.                         if (typeof ($) !== "undefined" && $.messager && $.messager.alert) {  
    78.                             $.messager.alert('Error', data.message, 'warning');  
    79.   
    80.                         } else {  
    81.                             alert(data.message);  
    82.                         }  
    83.                     } else {  
    84.                         //self.exec('insertimage', url, title, width, height, border, align);  
    85.                         if(K.undef(self.formatUploadUrl, true))  
    86.                             data.url =K.formatUrl(data.url, 'absolute');  
    87.                         self.exec('insertimage', data.url, "from clipboard", undefined, undefined, undefined, undefined);  
    88.                     }  
    89.                     //}  
    90.                     // fn(data);  
    91.                     // }  
    92.                 }  
    93.             }  
    94.             xhr.send(formData);  
    95.         }  
    96.         return true;  
    97.     }  
    98. }  
    99. //debugger;  
    100. if (dopasteImg())  
    101.     e.stop();  
    102.       //处理粘贴结束5825  


    此代码在chrome中测试通过,上传文件的服务器端处理无须改变,本代码已在chrome v35,IE11上测试通过

    其中处理的几个例外情况是:

      1. .在IE11和Chrome以外的浏览器中,如果复制了图片,粘贴,有可能会粘贴成<img src="data:img/png:base64:xxxxxx"..../>这种形式的,如IE10或者Firefox,但也可能会粘贴成<img src="本地路径" 这种格式的,前一种格式,如果通过一些复杂的处理,做成上传比较容易(或者直接不处理,但这只能显示在支持这种HTML5格式的浏览器中),但后一种情况,如从OutLook收件箱中复制的图片,本人认为处理会很复杂,所以简单起见,禁止这些情况的粘贴
      2. 在chrome中,如果复制了Outlook收件箱的图片,在剪切板中是找不到这个文件的内容的(file.size==0),这种情况下的粘贴也会被禁止并提示
      3. 在IE11和Chrome中都有FormData对象,所以当能取到文件的时候一定是IE11或者Chrome
      4. 如果是火狐浏览器,pasteType设置为2即可,且在引用时判断浏览器类型如为火狐。则用form-data方式进行存储。(暂时找不到更好的办法,望指教)
  • 相关阅读:
    Linux调试工具
    LINUX总结第13篇:LINUX下动态库及版本号控制
    linux虚拟机无法上网 Network is unreachable
    VMware 如何通过现有虚拟机克隆新的虚拟机 (图文)
    Win10下安装虚拟机提示“Intel VT-x处于禁用状态”如何解决
    VMware安装Centos7超详细过程(图文)
    kubernetes---CentOS7安装kubernetes1.11.2图文完整版
    通过Idea进行Kubernetes YAML开发
    如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
    SpringBoot + Spring Security 基本使用及个性化登录配置详解
  • 原文地址:https://www.cnblogs.com/cztisthebest/p/5913353.html
Copyright © 2011-2022 走看看