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学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
请离开include_once和require_once
Jul 18 PHP
php递归函数中使用return的注意事项
Jan 17 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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
提问的智慧(2)
2006/10/09 PHP
php设置编码格式的方法
2013/03/05 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
关于this和self的使用说明
2010/08/01 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
js中function()使用方法
2013/12/24 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
浅谈node模块与npm包管理工具
2018/01/03 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python实现简单的代理服务器
2015/07/25 Python
Sanic框架配置操作分析
2018/07/17 Python
python实现抽奖小程序
2020/04/15 Python
英国现代绅士品牌:Hackett
2017/12/17 全球购物
初一学生期末评语
2014/04/24 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
旷工检讨书1000字
2015/01/01 职场文书
北京英语导游词
2015/02/12 职场文书
学术研讨会主持词
2015/07/04 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
Mysql事务索引知识汇总
2022/03/17 MySQL
windows server2008 开启端口的实现方法
2022/06/25 Servers