找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 523|回复: 0
打印 上一主题 下一主题

Yii结合CKEditor实现图片上传功能

[复制链接]

2647

主题

2647

帖子

7881

积分

论坛元老

Rank: 8Rank: 8

积分
7881
跳转到指定楼层
楼主
发表于 2018-2-14 05:57:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            这几天做的一个项目中需要在所见即所得编辑器中实现图片上传的功能,我因为比较喜欢CKEditor的界面而选择了它。虽然有跟CKEditor配合良好的CKFinder,不过这个东东的功能太复杂,简单看了下CKEdtior的文档,发现这个功能还是可以自己实现而不用借助CKFinder的。
下面代码虽然基于Yii Framework的,但是用其他框架或者语言思路却是完全一样的,有需要的童鞋可以参考一下。
首先要让CkEditor出现图片上传的功能,需要配置编辑器的filebrowserImageUploadUrl属性:
[U]复制代码[/U] 代码如下:
CKEDITOR.replace( 'editor1',
    {
        filebrowserUploadUrl : '/uploader/upload.php',
        filebrowserImageUploadUrl : '/uploader/upload.php?type=Images'
    });
然后在对应的URL上实现图片上传的功能,并向CKEditor返回特定格式的HTML代码,CKEditor就能正常预览并插入图片了。
下面只截取控制器的部分代码,Controller部分我是这样实现的:
[U]复制代码[/U] 代码如下:
/**
* 保存上传的图片
*
* @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的代码,这里会验证图片的格式和大小是否符合要求。
[U]复制代码[/U] 代码如下:
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'=>'文件大小超过限制',
   ),
  );
}
}
            
            
您可能感兴趣的文章:
  • yii上传文件或图片实例
  • yii实现图片上传及缩略图生成的方法
  • yii使用activeFileField控件实现上传文件与图片的方法
  • Yii框架上传图片用法总结
  • yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
  • Yii2实现ajax上传图片插件用法
  • Yii+upload实现AJAX上传图片的方法
  • yii2高级应用之自定义组件实现全局使用图片上传功能的方法
  • yii2利用自带UploadedFile实现上传图片的示例
  • YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
  • Yii框架实现图片上传的方法详解
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端