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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Dec 06 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
php中namespace及use用法分析
Dec 06 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
简介Django框架中可使用的各类缓存
2015/07/23 Python
django ajax json的实例代码
2018/05/29 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
python图形用户接口实例详解
2019/12/16 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
python如何更新包
2020/06/11 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
RealTek面试题
2016/06/28 面试题
2014年应届大学生自我评价
2014/01/09 职场文书
西门豹教学反思
2014/02/04 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
重阳节标语大全
2014/10/07 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书