[转]Kindeditor图片粘贴上传(chrome)

摘要:
Kindeditor4.1.x支持批量上传图像,但传统的文件选择上传方法仍然效率低下。所以我“扩展”了幼儿园老师。实现思想是使用kinditor提供的api+javascript代码。51kindEditor.insertHtml;525354},55错误:函数{56console.log;57}58});5960}6162}636465}); 66}67}); 虽然功能可用,但它们不是很详细。在实际应用中,还可以考虑压缩和图像尺寸减小。

原文地址: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='https://tool.4xseo.com/article/260509.html"+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)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇对数组名取地址 a[ ],&amp;amp;a完全方案:超详细的webpack4配置(webpack3与webpack4的差异)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

web前端图片上传(2)

今天发现了一种ajax上传图片的方式,是以前没有用过的,首先来说下为什么要用这种方式。是因为原来后台是用的form表单的方式来提交表单数据的。但是觉得呢,这种方式不太好,因为要刷新页面,前台只用控制台看不到传输的参数(如果哪位大神知道怎么看到,请不吝赐教),所以我们就改成了ajax的方式,结果后台老哥说,前端改改就行了,后端不用改。然后我去找到了这种aja...

FormData 知识点

通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据,因此可以独立于表单使用。 如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同。 因此:使用FormData对象,和把表单的编码类型...

你不知道的 Blob

来自公众号:全栈修仙之路 如果你允许用户从你的网站上下载某些文件,那你可能会遇到 Blob 类型。为了实现上述的功能,你可以很容易从网上找到相关的示例,并根据实际需求进行适当的调整。对于部分开发者来说,在完成上述功能之后,他们并不会继续思考 Blob 是什么? 这就导致了一些开发者,还是停留在熟练使用 API 的层面,当遇到比较棘手的问题时,就束手无策...

requests.exceptions.SSLError: HTTPSConnectionPool(host='cn.bing.com', port=443)报错解决方案

一、问题描述 运行以下代码 #!/usr/local/bin/python3.7 import requests import ssl # 请求url url = 'https://cn.bing.com/tlookupv3?isVertical=1&&IG=1E1AE90B09BB41E28506E0ADC9E45704&II...

文件上传的几种方式_django

一、form组件形式上传文件 缺点:页面会刷新 后台: 前端:   二、ajax形式上传 能够实现页面不刷新上传 1、原生ajax上传,使用XMLHttpRequest对象来进行上传   流程:     生成XMLHttpRequest对象     对象编写数据open()     开始发送send()     编写对象的回调函数xhr.onreadys...

jquery表单插件 jquery.form(异步提交)(学习总结)

不通过jquery.form实现异步提交 通过一个iframe 将form 的target定位到iframe中的name <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional...