kindEditor或中的图片粘贴处理
2015-06-17 00:00
711 查看
摘要: 从CLIPBOARD中拷贝图片
在使用kindEditor的时候,如果我们通过拷贝粘贴的方式将一个图片/截图文件粘贴到kindEditor中时,会在body部分生成如下一部分代码:
提交时,这部分内容会原封不动的提交到后台,写入数据库。通过查阅资料(http://www.foliotek.com/devblog/copy-images-from-clipboard-in-javascript/),找到一种方式,在粘贴图片时,将图片上传,html中则只存放文件在服务区上保存的路径,提交到后台之后,则将文件路径写入数据库,读取时加载即可。如下所示:
其实不仅仅是kindEditor,其它场景下的图片拷贝都类似,可以采用上述方式来处理。在aftreCreate中为body绑定paste事件,拷贝时同时将图片内容发送给服务器,前台的代码如下所示:
在后端,我们需要响应ajax请求,并返回一个图片存放的路径和文件名,代码如下所示(PHP):
在使用kindEditor的时候,如果我们通过拷贝粘贴的方式将一个图片/截图文件粘贴到kindEditor中时,会在body部分生成如下一部分代码:
提交时,这部分内容会原封不动的提交到后台,写入数据库。通过查阅资料(http://www.foliotek.com/devblog/copy-images-from-clipboard-in-javascript/),找到一种方式,在粘贴图片时,将图片上传,html中则只存放文件在服务区上保存的路径,提交到后台之后,则将文件路径写入数据库,读取时加载即可。如下所示:
其实不仅仅是kindEditor,其它场景下的图片拷贝都类似,可以采用上述方式来处理。在aftreCreate中为body绑定paste事件,拷贝时同时将图片内容发送给服务器,前台的代码如下所示:
var K = KindEditor; keEditor = K.create('#' + editorID, { //...... afterCreate : function() { var doc = this.edit.doc; var cmd = this.edit.cmd; /* Paste in chrome.*/ if(K.WEBKIT) { K(doc.body).bind('paste', function(e) { var $this = $(this); var original = e.originalEvent; var file = original.clipboardData.items[0].getAsFile(); var reader = new FileReader(); reader.onload = function (event) { var result = event.target.result; var arr = result.split(","); var data = arr[1]; // raw base64 var contentType = arr[0].split(";")[0].split(":")[1]; html = '<img src="' + result + '" alt="" />'; $.post("imageUpload", editor: html, function(data) { if(data) return cmd.inserthtml(data); alert(v.errorUnwritable); return cmd.inserthtml(html); }); }; reader.readAsDataURL(file); }); } /* Paste in firefox or IE.*/ if(K.GECKO || K.IE) { K(doc.body).bind('paste', function(ev) { setTimeout(function() { var html = K(doc.body).html(); if(html.search(/<img src="data:.+;base64,/) > -1) { $.post("imageUpload", editor: html, function(data) { if(data) return K(doc.body).html(data); alert(v.errorUnwritable); return K(doc.body).html(data); }); } }, 80); }); } /* End */ } });
在后端,我们需要响应ajax请求,并返回一个图片存放的路径和文件名,代码如下所示(PHP):
public function pasteImage($data) { $data = str_replace('\"', '"', $data); ini_set('pcre.backtrack_limit', strlen($data)); /* 根据特征匹配图片内容 */ preg_match_all('/<img src="(data:image\/(\S+);base64,(\S+))".*\/>/U', $data, $out); foreach($out[3] as $key => $base64Image) { /* 解密内容 */ $imageData = base64_decode($base64Image); $extension = $out[2][$key]; /* 根据key和扩展名生成一个文件名称 */ $pathname = $this->setPathName($key, extension); /* 保存文件 */ file_put_contents($this->tmpPath . $pathname, $imageData); /* 将data:image....的内容替换为文件路径 */ $data = str_replace($out[1][$key], $this->webDataPath . $pathname, $data); } return $data; }
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 异步流程控制:7 行代码学会 co 模块
- JavaScript拆分字符串时产生空字符的原因
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets
- javascript asp教程第十二课---session对象
- javascript asp教程创建数据库连接
- javascript asp教程错误处理
- javascript asp教程第十课--global asa