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 13 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
用php+javascript实现二级级联菜单的制作
May 06 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
php接口与接口引用的深入解析
Aug 09 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
在Windows XP下安装Apache+MySQL+PHP环境
Feb 22 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
php微信开发之关注事件
Jun 14 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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 session实现多级目录存放实现代码
2016/02/03 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
python查询mysql,返回json的实例
2018/03/26 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
使用python模拟命令行终端的示例
2019/08/13 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
经销商培训邀请函
2014/01/21 职场文书
村级四风对照检查材料
2014/08/24 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
银行授权委托书样本
2014/10/13 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Python函数中apply、map、applymap的区别
2021/11/27 Python
MySQL的索引你了解吗
2022/03/13 MySQL
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers