0

PHP实现CKEditor图片上传(过程详细)

从官网http://www.ckeditor.com/下载CKEditor,根据需要可以选择基本,标准,完整或自定义版,本篇文章中使用的是CKEditor_4.7.0_full完整版。

首先集成CKEditor到所需要的的页面,具体代码如下


<html>
<head>
    <title>CKEditor集成</title>
<!-- 引入ckeditor库文件 -->
  <script src="../jbsage/js/ckeditor_4.7.0_full/ckeditor.js"></script>
</head>
<body>
     <textarea id="content"></textarea>
    <script>
    //初始化编辑器,将它应用到id为editor的元素上
    CKEDITOR.replace('content');
    </script>
</body>
</html>

浏览器打开页面之后就会看到CKEditor的编辑器,编辑器中有插入图片的功能,如下图所示:


默认只能输入图片URL不能上传本地图片,必须要先开启上传功能,怎么开启前端的上传功能?很简单,只用对刚才的初始化编辑器代码稍作修改即可,把这一行代码


CKEDITOR.replace('content');

修改成:

CKEDITOR.replace('content',{
      //浏览服务器地址,从服务器获取图片列表
      filebrowserBrowseUrl:'http://www.jbsage.com/fileUpload.php?t=0&type=image',
     //图片上传地址,在服务器上保存上传的图片
      filebrowserUploadUrl:'http://www.jbsage.com/fileUpload.php?t=1&type=image',
      language:'zh-cn',
      });  

       

上面两幅图,是添加图片浏览和上传功能之后,第二个界面上多了两个操作按钮。
切换到“上传”分页,可以看到,CKEditoer的上传功能添加成功,如下图所示:



在CKEditoer编辑器中配置filebrowserBrowseUrl,配置好了之后将显示一个“浏览服务器”按钮,用户可以点击该按钮,调用刚才指定的地址“http://www.jbsage.com/fileUpload.php?t=0&type=image” 去获取服务器上的图片列表。
filebrowserUploadUrl,配置好了之后插入图片窗口将多出一个“上传”标签,用户可以在这里选择本地图片,点上传后图片将被发送到我们配置的地址“http://www.jbsage.com/fileUpload.php?t=1&type=image”。


 



至此,就在Web前端完成了CKEditor图片浏览和上传的界面操作部分,接下来就需要在服务端实现图片上传功能。CKEditor编辑器将图片以'upload'的名字上传,同时还会带上一个CKEditorFuncNum的参数,这个参数用来回调通知编辑器图片上传的结果。

 

处理步骤是PHP先获取$_FIile['upload']和$_GET['CKEditorFuncNum'],然后将上传的图片放置到服务上,可以让服务器根据上传结果返回一个调用CKEditor的javascript,这样你就知道上传的刚才上传的服务器的地址了,下面是服务器端的实现过程关键代码:



$num = $_GET['CKEditorFuncNum']; //获得CKEditor的回调id
try {
    if(isset($_FILES['upload'])) { //上传的图片的信息存在$_FILES['upload']
        $s = new FileService();
        //保存上传图片的逻辑,返回图片url
        $url = $s->uploadImg($_FILES['upload']['name'], $folder);
        //图片上传成功,通知CKEditor图片的url
        echo "<script>window.parent.CKEDITOR.tools.callFunction($num, '$url', '');</script>"
    }    
}catch (Exception $e) {
    $erro = $e->getMessage();
    //通知CKEditor图片上传失败
    echo "<script>window.parent.CKEDITOR.tools.callFunction($num, '', '$erro');</script>"
}

其中$num是之前获取的CKEditorFuncNum,$url是上传成功后访问图片的url,$erro是上传失败时CKEditor需要显示给用户的错误信息。

官方网站参考链接:
adding-file-manager-scripts-for-selected-dialog-windows
https://sdk.ckeditor.com/samples/fileupload.html
 

想获得PHP端具体实现代码的也可以加QQ群,277146571 深入交流。