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手册及PHP编程标准
Dec 17 PHP
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
PHP 变量定义和变量替换的方法
Jul 30 PHP
php whois查询API制作方法
Jun 23 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
php的ddos攻击解决方法
Jan 08 PHP
php文件操作相关类实例
Jun 18 PHP
基于PHP制作验证码
Oct 12 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
浅谈PHP各环境下的伪静态配置
Mar 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
php ftp文件上传函数(基础版)
2010/06/03 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
Python使用chardet判断字符编码
2015/05/09 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
python实现邮件发送功能
2019/08/10 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
酒店办公室文员岗位职责
2013/12/18 职场文书
syb养殖创业计划书
2014/01/09 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
违章停车检讨书
2014/10/21 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
优秀党员先进材料
2014/12/18 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
客户答谢会致辞
2015/07/30 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
八年级作文之友谊
2019/12/02 职场文书
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android