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 之入门篇
Dec 04 PHP
php采集速度探究总结(原创)
Apr 18 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
apache和php之间协同工作的配置经验分享
Apr 08 PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 PHP
php中namespace use用法实例分析
Jan 22 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
php中字符串和整数比较的操作方法
Jun 06 PHP
实例讲解PHP表单
Jun 10 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
利用python写个下载teahour音频的小脚本
2017/05/08 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
python编程线性回归代码示例
2017/12/07 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
同学聚会欢迎辞
2014/01/14 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
法制宣传月活动方案
2014/05/11 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python