Yii结合CKEditor实现图片上传功能


Posted in PHP onJune 13, 2014

这几天做的一个项目中需要在所见即所得编辑器中实现图片上传的功能,我因为比较喜欢CKEditor的界面而选择了它。虽然有跟CKEditor配合良好的CKFinder,不过这个东东的功能太复杂,简单看了下CKEdtior的文档,发现这个功能还是可以自己实现而不用借助CKFinder的。

下面代码虽然基于Yii Framework的,但是用其他框架或者语言思路却是完全一样的,有需要的童鞋可以参考一下。

首先要让CkEditor出现图片上传的功能,需要配置编辑器的filebrowserImageUploadUrl属性:

CKEDITOR.replace( 'editor1',
    {
        filebrowserUploadUrl : '/uploader/upload.php',
        filebrowserImageUploadUrl : '/uploader/upload.php?type=Images'
    });

然后在对应的URL上实现图片上传的功能,并向CKEditor返回特定格式的HTML代码,CKEditor就能正常预览并插入图片了。
下面只截取控制器的部分代码,Controller部分我是这样实现的:
/**
 * 保存上传的图片
 *
 * @return string javascript code
 * @author lfyzjck
 **/
public function actionImg($type, $CKEditor, $CKEditorFuncNum, $langCode = 'zh-cn')
{
 if(empty($CKEditorFuncNum) || $type != 'Images'){
  $this->mkhtml($CKEditorFuncNum,'','错误的函数调用');
 }
 if(isset($_FILES['upload'])){
  //获取关于图片上传配置
  $options = Options::model()->findByPk(1);
  $form = new UploadForm('image',$options);
  $form->upload = CUploadedFile::getInstanceByName('upload');
  if($form->validate()){
  //文件名:时间+源文件名
   $target_filename = date('Ymd-hm',time()).$form->upload->getName();
   $path = Yii::app()->basePath.'/../uploads/'.$target_filename;   //图片保存路径
   $form->upload->saveAs($path);
   $this->mkhtml($CKEditorFuncNum,Yii::app()->baseUrl.'/uploads/'.$target_filename, "上传成功");
  }
  else{
   $this->mkhtml($CKEditorFuncNum,'',$form->getError('upload'));
  }
 }
}
/**
 * 返回CKEditor的提示信息
 *
 * @return void
 * @author lfyzjck
 **/
private function mkhtml($fn, $fileurl, $message) 
{
 $str = '';
 exit($str);
}

需要特别说明的mkhtml函数,他会调用CKEditor的函数产生提示信息。上传成功的时候将图片链接返回,CKEditor会根据URL生成图片预览。

然后是UploadForm的代码,这里会验证图片的格式和大小是否符合要求。

class UploadForm extends CFormModel
{
 public $upload;
 private $options;
 private $type;
 public function __construct($type, $options){
  $this->options = $options;
  $this->type = $type;
 }
 /**
  * Declares the validation rules.
  * The rules state that username and password are required,
  * and password needs to be authenticated.
  */
 public function rules()
 {
  return array(
   array('upload', 'file', 
    'types' => $this->options->getAttribute("allow_".$this->type."_type"), 
    'maxSize' => 1024 * (int)$this->options->getAttribute("allow_".$this->type."_maxsize"),
    'tooLarge'=>'文件大小超过限制',
   ),
  );
 }
}
PHP 相关文章推荐
PHP开发的一些注意点总结
Oct 12 PHP
php数组一对一替换实现代码
Aug 31 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php获取远程文件的内容和大小
Nov 03 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
php实现算术验证码功能
Dec 05 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 PHP
php访问对象中的成员的实例方法
Nov 17 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 #PHP
ThinkPHP中U方法的使用浅析
Jun 13 #PHP
PHP实现单例模式最安全的做法
Jun 13 #PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 #PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 #PHP
PHP中多维数组的foreach遍历示例
Jun 13 #PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 #PHP
You might like
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
Python通过文本和图片生成词云图
2020/05/21 Python
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
会计出纳员的自我评价
2014/01/15 职场文书
秋季运动会广播稿
2014/02/22 职场文书
事业单位考核材料
2014/05/21 职场文书
新学期开学标语
2014/06/30 职场文书
推普周活动总结
2014/08/28 职场文书
先进人物事迹材料
2014/12/29 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
党小组意见范文
2015/06/08 职场文书
环境卫生整治简报
2015/07/20 职场文书