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 相关文章推荐
类的另类用法--数据的封装
Oct 09 PHP
PHP 5.3.0 安装分析心得
Aug 07 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
php实现按文件名搜索文件的远程文件查找器
May 10 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
分享php多功能图片处理类
May 15 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 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的加密方式及原理
2012/06/14 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
js post提交调用方法
2014/02/12 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
python简单实现旋转图片的方法
2015/05/30 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
python manage.py runserver流程解析
2019/11/08 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
python logging通过json文件配置的步骤
2020/04/27 Python
python绘制趋势图的示例
2020/09/17 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
医科大学生的自我评价
2013/12/04 职场文书
英语自我评价范文
2014/01/24 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
优秀教师单行材料
2014/12/16 职场文书
python基于turtle绘制几何图形
2021/06/15 Python
配置nginx负载均衡
2022/05/06 Servers
Mysql 一主多从的部署
2022/05/20 MySQL