最近有个项目需要用到富文本编辑器,编辑器插件地址:wangEditor,对于编辑器插入图片的问问苦苦没有解决方法。后来看了官方文档之后,集成了plupload上传插件和七牛云存储,遇到比较多问题,不过后来都解决了,仅此记录实现过程。
1. 实例化编辑器和上传插件
这个官方文档有了不比多说,直接贴代码,集成plupload上传插件和七牛云存储,参考官方给的demo。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
<script type="text/javascript"> // 封装 console.log 函数 function printLog(title, info) { window.console && console.log(title, info); } // 初始化七牛上传 function uploadInit() { // this 即 editor 对象 var editor = this; // 触发选择文件的按钮的id var btnId = editor.customUploadBtnId; // 触发选择文件的按钮的父容器的id var containerId = editor.customUploadContainerId; var sourceLink; // 创建上传对象 var uploader = Qiniu.uploader({ runtimes: 'html5,flash,html4', //上传模式,依次退化 browse_button: btnId, //上传选择的点选按钮,**必需** uptoken_url: 'http://qq597914752.gotoip1.com/upload.php', //Ajax请求upToken的Url,**强烈建议设置**(服务端提供) // uptoken : '<Your upload token>', //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成 // unique_names: true, // 默认 false,key为文件名。若开启该选项,SDK会为每个文件自动生成key(文件名) // save_key: true, // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理 domain: 'http://7xrs03.com1.z0.glb.clouddn.com/', //bucket 域名,下载资源时用到,**必需** container: containerId, //上传区域DOM ID,默认是browser_button的父元素, max_file_size: '100mb', //最大文件体积限制 flash_swf_url: 'js/Moxie.swf', //引入flash,相对路径 filters: { mime_types: [ //只允许上传图片文件 (注意,extensions中,逗号后面不要加空格) { title: "图片文件", extensions: "jpg,gif,png,bmp" } ] }, max_retries: 3, //上传失败最大重试次数 dragdrop: true, //开启可拖曳上传 drop_element: 'editor-container', //拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传 chunk_size: '4mb', //分块上传时,每片的体积 auto_start: true, //选择文件后自动上传,若关闭需要自己绑定事件触发上传 init: { 'FilesAdded': function(up, files) { plupload.each(files, function(file) { // 文件添加进队列后,处理相关的事情 printLog('on FilesAdded'); }); }, 'BeforeUpload': function(up, file) { // 每个文件上传前,处理相关的事情 printLog('on BeforeUpload'); }, 'UploadProgress': function(up, file) { // 显示进度条 editor.showUploadProgress(file.percent); }, 'FileUploaded': function(up, file, info) { // 每个文件上传成功后,处理相关的事情 // 其中 info 是文件上传成功后,服务端返回的json,形式如 // { // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", // "key": "gogopher.jpg" // } printLog(info); // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html var domain = up.getOption('domain'); var res = $.parseJSON(info); sourceLink = domain + res.key; //获取上传成功后的文件的Url printLog(sourceLink); // 插入图片到editor editor.command(null, 'insertHtml', '<img src="' + sourceLink + '" style="max-width:100%;"/>'); }, 'Error': function(up, err, errTip) { //上传出错时,处理相关的事情 printLog('on Error'); }, 'UploadComplete': function() { //队列文件处理完毕后,处理相关的事情 printLog('on UploadComplete'); // 隐藏进度条 editor.hideUploadProgress(); } // Key 函数如果有需要自行配置,无特殊需要请注释 //, // 'Key': function(up, file) { // // 若想在前端对每个文件的key进行个性化处理,可以配置该函数 // // 该配置必须要在 unique_names: false , save_key: false 时才生效 // var key = ""; // // do something with key here // return key // } } }); // domain 为七牛空间(bucket)对应的域名,选择某个空间后,可通过"空间设置->基本设置->域名设置"查看获取 // uploader 为一个plupload对象,继承了所有plupload的方法,参考http://plupload.com/docs } // 生成编辑器 var editor = new wangEditor('editor'); editor.config.customUpload = true; // 设置自定义上传的开关 editor.config.customUploadInit = uploadInit; // 配置自定义上传初始化事件,uploadInit方法在上面定义了 editor.create(); </script> |
JavaScript代码如上,需要改的地方有‘uptoken_url’就是你生成token的地址和‘domain’是你七牛云的公开空间地址,记住在七牛云开空间先不要选设为私人的,因为你上传成功后读取还要token授权。
2. PHP 生成token
下载官方PHP的SDK:PHP (服务端),解压得到autoload.php和src文件夹,放在同一目录。然后下面是生成上传token 的PHP代码。因为我的PHP文件放在另一个服务器需要解决跨域请求问题,加了这些header,如前端和后端在同一服务器建议去掉header语句。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php require_once 'autoload.php'; header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:OPTIONS, GET, POST, PUT'); header("Access-Control-Allow-Headers: Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With"); header('Access-Control-Max-Age:86400'); use Qiniu\Auth; $bucket = 'pingxonline'; // 这里要改成你申请七牛云空间的名字,不是地址! $accessKey = ''; // AK和SK在个人中心可以找到,填上去即可 $secretKey = ''; $auth = new Auth($accessKey, $secretKey); $upToken = $auth->uploadToken($bucket); $arr['uptoken'] = $upToken; echo json_encode($arr); ?> |
官网文档有个坑,官网直接返回token,但是生成token的时候不能直接输出返回,要转换为json格式返回到前端才能识别。
最后
到这里应该就完成了wangEditor集成七牛云存储的方案,图片会存储到七牛云第三方服务中,同时也可以直接插入到编辑器里面方便编辑文章。
© 著作权归作者所有
文章评论(2)