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 相关文章推荐
简单实用的.net DataTable导出Execl
Oct 28 PHP
php使用strtotime和date函数判断日期是否有效代码分享
Dec 25 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
php用户注册时常用的检验函数实例总结
Dec 22 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
php表单提交实例讲解
Nov 12 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
PHP实现微信提现功能(微信商城)
Nov 21 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
dedecms模版制作使用方法
2007/04/03 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
jquery选择器简述
2015/08/31 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
js校验开始时间和结束时间
2020/05/26 Javascript
python格式化字符串实例总结
2014/09/28 Python
python解析xml文件实例分析
2015/05/27 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
python梯度下降算法的实现
2020/02/24 Python
python实现对变位词的判断方法
2020/04/05 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
python3.7调试的实例方法
2020/07/21 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
地球一小时宣传标语
2014/06/24 职场文书
服务员态度差检讨书
2014/10/28 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
MySQL学习之基础操作总结
2022/03/19 MySQL