原文地址:https://www.cnblogs.com/jsper/p/7608004.html

首先要赞一下kindeditor,一个十分强大的国产开源web-editor组件。


kindeditor4.1.x版本已支持图片批量上传,不过传统的选文件上传的方式依然效率低下。

很多时候,编辑人员可能需要将一个文档中图片上传到网上,那么,按照传统的上传方法,他必须先将图片另存为到本机,再用编辑器的上传选择文件进行上传。

这个过程至少要做这几个动作:在文档中图片上点右键 -> 点另存为 -> 选择目录 -> 点保存。上传时:点上传按钮 -> 选择目录 -> 选择文件。

可以看到,上传一张图片是十分繁琐的工作,特别时在选择目录的时候,那个小小的文件浏览器界面和千篇一律的文件夹定位,能使人抓狂。

网站编辑人员经常问我能不能从word中直接复制图片粘贴上传?

这个问题我自己也有疑问。带着这个疑问查阅了一些资料,经过学习研究,最终发现,通过很小的代码量就可以实现这个功能。

于是我对kindeditor进行了一下“扩展”。chrome61下测试通过。


通过搜索引擎查阅了一些资料,发现用最新浏览器技术是可以无障碍实现这个想法的。

大体要求及流程是:

1.编写paste粘贴事件的监听处理。

2.从剪切板获取数据。

3.ajax二进制上传。

4.显示到编辑器里。

实现思路是运用kindeditor提供的api+javascript代码结合实现。

把代码写到kindeditor的创建与初始化配置中,最终代码(可重点故关注注释):

 1 kindeEditor = KindEditor.create('#updatePapers_contentEditor', {
2
3 /***
4 * 图片上传必须使用绝对路径,因为KindeEditor有个缺陷,
5 * 它的批量上传和单个上传界面文件在不同级别的目录下,
6 * 用相对路径时,总是只能成功一种模式,另一种就不会成功,所以只能这样用绝对路径.
7 */
8 uploadJson : '/fileupload',//服务器文件上传接收程序路径
9 urlType : '',
10 resizeType:0,
11 //调用kindeditor的afterCreate回调函数对kindeditor功能进行“扩展”,实现图片粘贴上传。
12 afterCreate:function() {
13 var editerDoc = this.edit.doc;//得到编辑器的文档对象
14 //监听粘贴事件, 包括右键粘贴和ctrl+v
15 $(editerDoc).bind('paste', null, function (e) {
16 /*获得操作系统剪切板里的项目,e即kindeditor,
17 *kindeditor创建了originalEvent(源事件)对象,
18 *并指向了浏览器的事件对象,而chrome浏览器
19 *需要通过clipboardData(剪贴板数据)对象的items
20 *获得复制的图片数据。
21 */
22 var ele = e.originalEvent.clipboardData.items;
23 for (var i = 0; i < ele.length; ++i) {
24 //判断文件类型
25 if ( ele[i].kind == 'file' && ele[i].type.indexOf('image/') !== -1 ) {
26 var file = ele[i].getAsFile();//得到二进制数据
27 //创建表单对象,建立name=value的表单数据。
28 var formData = new FormData();
29 formData.append("imgFile",file);//name,value
30
31 //用jquery Ajax 上传二进制数据
32 $.ajax({
33 url : '/fileupload?dir=image',
34 type : 'POST',
35 data : formData,
36 // 告诉jQuery不要去处理发送的数据
37 processData : false,
38 // 告诉jQuery不要去设置Content-Type请求头
39 contentType : false,
40 dataType:"json",
41 beforeSend:function(){
42 //console.log("正在进行,请稍候");
43 },
44 success : function(responseStr) {
45 //上传完之后,生成图片标签回显图片,假定服务器返回url。
46 var src = responseStr.url;
47 var imgTag = "<img src='"+src+"' border='0'/>";
48
49 //console.info(imgTag);
50 //kindeditor提供了一个在焦点位置插入HTML的函数,调用此函数即可。
51 kindeEditor.insertHtml(imgTag);
52
53
54 },
55 error : function(responseStr) {
56 console.log("error");
57 }
58 });
59
60 }
61
62 }
63
64
65 });
66 }
67 });

功能虽然有了,但是功能并不是很细致,实际应用中可能还要考虑压缩,图片尺寸缩略。不过这些对于新一代浏览器都不是问题了,都有现成的api调用,可以直接实现。

另外,还不知道其他浏览器(IE9以上、Firefox、Safari等)是否能用。

我在搜索“浏览器粘贴上传”,发现了知乎上的一篇探讨:

《知乎回答问题编辑框用 Ctrl+V 粘贴图片是如何实现的?》https://www.zhihu.com/question/20893119

里面有几位大牛的代码非常吸引我,给了我实现这个功能的最基本要素。

[转]Kindeditor图片粘贴上传(chrome)的更多相关文章

  1. Kindeditor图片粘贴上传(chrome)

    kindeditor4.1.x版本已支持图片批量上传,不过传统的选文件上传的方式依然效率低下. 很多时候,编辑人员可能需要将一个文档中图片上传到网上,那么,按照传统的上传方法,他必须先将图片另存为到本 ...

  2. js实现图片粘贴上传到服务器并展示

    最近看了一些有关于js实现图片粘贴上传的demo,实现如下: (这里只能检测到截图粘贴和图片右键复制之后粘贴) demo1: document.addEventListener('paste', fu ...

  3. 如何实现一个 markdown 图片粘贴上传的博客后台系统

    如何实现一个 markdown 图片粘贴上传的博客后台系统 js 实现 drag & drop / copy & paste image uploader MongoDB 设计文档对象 ...

  4. ueditor+复制word图片粘贴上传

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...

  5. KindEditor图片批量上传

    KindEditor编辑器图片批量上传采用了上传插件swfupload.swf,所以后台上传文件方法返回格式应为JSONObject的String格式(注). JSONObject格式: JSONOb ...

  6. ueditor 图片粘贴上传,实现图文粘贴,图片自动上传

    如何做到 ueditor批量上传word图片? 1.前端引用代码 <!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN& ...

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

    很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...

  8. kindeditor实现ctrl+v粘贴word图片并上传

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...

  9. 如何在Chrome粘贴图片直接上传

    背景 截图或页面复制图片,可以直接通过Ctrl+v 粘贴上传图片 原理 操作:复制(截图)=>粘贴=>上传 监听粘贴事件=>获取剪贴板里的内容=>发请求上传 浏览器:Chrom ...

随机推荐

  1. OSPF补全计划-0 preface

    哇靠,一看日历吓了我一跳,我这一个月都没写任何东西,好吧,事情的确多了点儿,同事离职,我需要处理很多untechnical的东西,弄得我很烦,中间学的一点小东西(关于Linux的)也没往这里记,但是我 ...

  2. new关键字对构造函数做了什么

    new 命令 基本用法 new 命令的作用,就是执行构造函数,返回一个实例对象. 1 var Vehicle = function (){ 2 this.price = 1000; 3 }; 4 5 ...

  3. Codeforces Round #517 (Div. 2)

    A #include<queue> #include<cstdio> #include<cstring> #include<algorithm> #de ...

  4. Systick时钟定时

    主函数 /* Note:Your choice is C IDE */ #include "stdio.h" #include "led.h" void mai ...

  5. Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  6. BZOJ3273 : liars

    枚举每个人,计算他必定是诚实者的情况下至少有几个人说谎,若超过$t$则他肯定是说谎者. 对于至少有几个人说谎,区间信息可以合并: 每个区间维护最左最右两个人$l,r$以及$f[i][j]$表示$l$和 ...

  7. C++程序设计方法3:类中的静态成员

    在类型前面加static修饰的数据成员,是隶属于类的,成为类的静态数据成员,也称为“类的变量” 静态数据成员被该类的所有对象共享(即所有对象中的这个数据域实际上处于同一个内存位置) 静态数据要在实现文 ...

  8. Java 深复制和浅复制

    浅复制是指复制对象时仅仅复制对象本身(包括对象中的基本变量),而不复制对象包含的引用指向的对象.深复制不仅复制对象本身,而且复制对象包含的引用指向的对象. 复制对象时需要调用Object类的clone ...

  9. 深入理解JVM(9)——类加载的过程

    加载是类加载的第一步. 一.加载 a)加载的过程 1)通过一个类的全限定名获取这个类的二进制字节流,也就是class文件 2)将二进制字节流的存储结构转换为特定的数据结构,存储在方法区 3)在内存中创 ...

  10. javascript parseUrl函数解析url获取网址url参数

    function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, pr ...