粘贴图片在线html编辑器,KindEditor编辑器粘贴图片直接上传(Chrome,IE11,opera)

本方法来自网络,适用于KindEditor4.1.10。

经本人测试,Chrome,Firefox,360浏览器8.1极速模式可用,ie9测试不能用。

经测试KindEditor4.1.11版本,用此代码也可以实现自动上传功能。代码粘贴好后,直接用源代码里面提供的demo.php测试即可。如果自己引用的KindEditor编辑器实现不了,最好比对一下自己引用编辑器的代码和demo.php引用代码的区别,如果有区别,仿照一下基本能实现。

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

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

K(doc.body).bind('paste', function (e) {

if (self.pasteType === 0) {

e.stop();

return;

}

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

//处理IE11,Chrome粘贴图片上传

function dopasteImg() {

//debugger;

var file = null;

if (window.clipboardData) {//ie

if (clipboardData.files && clipboardData.files.length)//IE11

file = clipboardData.files[0];

else if (!clipboardData.getData("text") && !clipboardData.getData("url")) {

alert("不能粘贴文件或图片,请使用IE11或者Chrome浏览器,或使用上传功能");

return true;

}

} else {

if (e.event.clipboardData.items)//chrome

for (var i = 0; i < e.event.clipboardData.items.length; i++) {

if (e.event.clipboardData.items[i].kind === "file") {

file = e.event.clipboardData.items[i];

break;

}

}

if (file == null) {

if (!e.event.clipboardData.getData("url") && !e.event.clipboardData.getData("text")) {

alert("不能粘贴文件或图片,请使用IE11或者Chrome浏览器,或使用上传功能");

return true;

}

}

}

if (file) {

if (!K.undef(self.allowImageUpload, true)) {

alert("编辑器禁止上传图片,请与有关人员联系!");

return true;

}

//获取File Blob

//debugger;

var blb;

if (file.getAsFile) {//Chrome

blb = file.getAsFile();

if (blb.size === 0) {

alert("不能获取剪切板中的" + (file.type.indexOf("image/") === 0 ? "图像" : "文件")

+"\n如果是从OutLook中复制的,请换其他程序,如Word");

return true;

}

sendfile(blb, file.type);

} else {

var fr = new FileReader();

if (fr.readAsArrayBuffer) {//ie

fr.onloadend = function (evt) {

blb = evt.target.result;

sendfile(blb, file.type);

}

fr.readAsArrayBuffer(file);

}

}

function sendfile(b, t) {

var xhr = new XMLHttpRequest();

var formData = new FormData();

var isImg = t.indexOf("image/") === 0;

//formData.append('imgFile', file,"untitled." + t.split('/')[1]);

//formData.append('imgFile', b);

var myBlob = new Blob([b], { "type": t });

formData.append('imgFile', myBlob, "untitled." + t.split('/')[1]);

//formData.append('imgFile', b);

formData.append('dir', isImg ? 'image' : 'file');

xhr.open('POST', self.uploadJson);

xhr.onreadystatechange = function () {

if (xhr.readyState == 4&&xhr.status == 200) {

// if (fn) {

var data = _trim(xhr.responseText);

//if (dataType == 'json') {

data = _json(data);

if (data.error) {

if (typeof ($) !== "undefined" && $.messager && $.messager.alert) {

$.messager.alert('Error', data.message, 'warning');

} else {

alert(data.message);

}

} else {

//self.exec('insertimage', url, title, width, height, border, align);

if(K.undef(self.formatUploadUrl, true))

data.url =K.formatUrl(data.url, 'absolute');

self.exec('insertimage', data.url, "from clipboard", undefined, undefined, undefined, undefined);

}

//}

// fn(data);

// }

}

}

xhr.send(formData);

}

return true;

}

}

//debugger;

if (dopasteImg())

e.stop();

//处理粘贴结束5825

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

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

.在IE11和Chrome以外的浏览器中,如果复制了图片,粘贴,有可能会粘贴成这种形式的,如IE10或者Firefox,但也可能会粘贴成%E6%9C%AC%E5%9C%B0%E8%B7%AF%E5%BE%84

在chrome中,如果复制了Outlook收件箱的图片,在剪切板中是找不到这个文件的内容的(file.size==0),这种情况下的粘贴也会被禁止并提示

在IE11和Chrome中都有FormData对象,所以当能取到文件的时候一定是IE11或者Chrome

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值