Yii结合CKEditor实现图片上传功能
这几天做的一个项目中需要在所见即所得编辑器中实现图片上传的功能,我因为比较喜欢CKEditor的界面而选择了它。虽然有跟CKEditor配合良好的CKFinder,不过这个东东的功能太复杂,简单看了下CKEdtior的文档,发现这个功能还是可以自己实现而不用借助CKFinder的。
下面代码虽然基于YiiFramework的,但是用其他框架或者语言思路却是完全一样的,有需要的童鞋可以参考一下。
首先要让CkEditor出现图片上传的功能,需要配置编辑器的filebrowserImageUploadUrl属性:
CKEDITOR.replace("editor1",
{
filebrowserUploadUrl:"/uploader/upload.php",
filebrowserImageUploadUrl:"/uploader/upload.php?type=Images"
});
然后在对应的URL上实现图片上传的功能,并向CKEditor返回特定格式的HTML代码,CKEditor就能正常预览并插入图片了。
下面只截取控制器的部分代码,Controller部分我是这样实现的:
/**
*保存上传的图片
*
*@returnstringjavascriptcode
*@authorlfyzjck
**/
publicfunctionactionImg($type,$CKEditor,$CKEditorFuncNum,$langCode="zh-cn")
{
if(empty($CKEditorFuncNum)||$type!="Images"){
$this->mkhtml($CKEditorFuncNum,"","错误的函数调用");
}
if(isset($_FILES["upload"])){
//获取关于图片上传配置
$options=Options::model()->findByPk(1);
$form=newUploadForm("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的提示信息
*
*@returnvoid
*@authorlfyzjck
**/
privatefunctionmkhtml($fn,$fileurl,$message)
{
$str="";
exit($str);
}
需要特别说明的mkhtml函数,他会调用CKEditor的函数产生提示信息。上传成功的时候将图片链接返回,CKEditor会根据URL生成图片预览。
然后是UploadForm的代码,这里会验证图片的格式和大小是否符合要求。
classUploadFormextendsCFormModel
{
public$upload;
private$options;
private$type;
publicfunction__construct($type,$options){
$this->options=$options;
$this->type=$type;
}
/**
*Declaresthevalidationrules.
*Therulesstatethatusernameandpasswordarerequired,
*andpasswordneedstobeauthenticated.
*/
publicfunctionrules()
{
returnarray(
array("upload","file",
"types"=>$this->options->getAttribute("allow_".$this->type."_type"),
"maxSize"=>1024*(int)$this->options->getAttribute("allow_".$this->type."_maxsize"),
"tooLarge"=>"文件大小超过限制",
),
);
}
}
相关文章
- 使用Spring AOP实现异步文件上传
- input = file 实现上传文件
- 用 MiniFramework 实现文件上传功能
- WordPress插件实现上传图片单独存到至腾讯云COS对象存储
- uploadify struts2实现图片上传详解编程语言
- Spring MVC环境中的文件上传功能实现详解编程语言
- Linux脚本实现文件上传功能(linux上传文件脚本)
- 使用MySQL上传脚本实现数据备份和恢复(mysql上传脚本)
- MySQL实现本地文件上传功能(mysql 上传本地文件)
- PHP文件上传功能实现代码
- jspSmartUpload实现上传功能代码
- FileUpload上传图片前实现图片预览功能(附演示动画)
- Servlet+Jsp实现图片或文件的上传功能具体思路及代码
- jquery实现兼容浏览器的图片上传本地预览功能
- PHP中使用Session配合Javascript实现文件上传进度条功能
- 使用ajaxfileupload.js实现ajax上传文件php版
- php+jQuery.uploadify实现文件上传教程
- .net文件上传时实现通过文件头确认文件类型的方法
- 基于C#winform实现图片上传功能的方法
- C#实现图片上传与浏览切换的方法