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 COOKIE设置为浏览器进程
Jun 21 PHP
PHP取进制余数函数代码
Jan 19 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
解析htaccess伪静态的规则
Jun 18 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
PHP中的一些常用函数收集
May 26 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
Aug 28 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 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.ini 中文版
2006/10/28 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
详解vue 数据传递的方法
2018/04/19 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
职业生涯规划书范文
2014/03/10 职场文书
超市商业计划书
2014/05/04 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
原生JS实现分页
2022/04/19 Javascript