YII框架下整合上传插件EFineUploader
2014-03-04 12:01
766 查看
1.下载EFineUploader,解压到ext目录下
2.视图层通过以下代码调用
<?php $this->widget('ext.EFineUploader.EFineUploader',
array(
'id'=>'FineUploader',
'config'=>array(
'autoUpload'=>true,
'request'=>array(
'endpoint'=>$this->createUrl('upload'),
'params'=>array('YII_CSRF_TOKEN'=>Yii::app()->request->csrfToken)
),
'retry'=>array('enableAuto'=>true,'preventRetryResponseProperty'=>true),
'chunking'=>array('enable'=>true,'partSize'=>100),//bytes
'callbacks'=>array(
'onComplete'=>"js:function(id, name, response){ }",
'onError'=>"js:function(id, name, errorReason){ }",
),
'validation'=>array(
'allowedExtensions'=>array('jpg','jpeg'),
'sizeLimit'=>2 * 1024 * 1024,//maximum file size in bytes
'minSizeLimit'=>0,// minimum file size in bytes
),
)
));
?>
这里需要修改的地方包括endpoint参数,改成后台响应的php url,
注意去掉callbacks数组的注释
3.控制器里新加一个ACTION响应
public function actionUpload()
{
$tempDir = '/upload/'.date('Ym').'/'.date('d').'/';
$tempFolder=Yii::getPathOfAlias('webroot').'/upload/'.date('Ym').'/'.date('d').'/';
if(!is_dir($tempFolder))
{
mkdir($tempFolder, 0777, TRUE);
mkdir($tempFolder.'chunks', 0777, TRUE);
}
Yii::import("ext.EFineUploader.qqFileUploader");
$uploader = new qqFileUploader();
$uploader->allowedExtensions = array('jpg','jpeg','png','gif');
$uploader->sizeLimit = 2 * 1024 * 1024;//maximum file size in bytes
$uploader->chunksFolder = $tempFolder.'chunks';
$ext = substr($_FILES['qqfile']['name'], strrpos($_FILES['qqfile']['name'],'.')) ;
$name = (microtime()*1000000).$ext;
$result = $uploader->handleUpload($tempFolder,$name);
$result['folder'] = $webFolder;
$result['filename'] = $tempDir.$name;
$uploadedFile=$tempFolder.$name;
header("Content-Type: text/plain");
$result=htmlspecialchars(json_encode($result), ENT_NOQUOTES);
echo $result;
Yii::app()->end();
}
我这里没有使用官方给出的示例,修改了上传的目录
此函数会返回一个JSON数组,在CALLBACKS里面可以用RESPONSE调用
所以我把callbacks数组里的oncomplete改成了
'onComplete'=>"js:function(id, name, response){ $('#VendorProducts_product_img').val(response.filename);$('#imgLink').attr('href',response.filename) }",
完成上传后进行的一系列浏览器端操作
NOTE:
可能会出现notice错误 解决方法是注释掉
EfineUploader.php 117行
2.视图层通过以下代码调用
<?php $this->widget('ext.EFineUploader.EFineUploader',
array(
'id'=>'FineUploader',
'config'=>array(
'autoUpload'=>true,
'request'=>array(
'endpoint'=>$this->createUrl('upload'),
'params'=>array('YII_CSRF_TOKEN'=>Yii::app()->request->csrfToken)
),
'retry'=>array('enableAuto'=>true,'preventRetryResponseProperty'=>true),
'chunking'=>array('enable'=>true,'partSize'=>100),//bytes
'callbacks'=>array(
'onComplete'=>"js:function(id, name, response){ }",
'onError'=>"js:function(id, name, errorReason){ }",
),
'validation'=>array(
'allowedExtensions'=>array('jpg','jpeg'),
'sizeLimit'=>2 * 1024 * 1024,//maximum file size in bytes
'minSizeLimit'=>0,// minimum file size in bytes
),
)
));
?>
这里需要修改的地方包括endpoint参数,改成后台响应的php url,
注意去掉callbacks数组的注释
3.控制器里新加一个ACTION响应
public function actionUpload()
{
$tempDir = '/upload/'.date('Ym').'/'.date('d').'/';
$tempFolder=Yii::getPathOfAlias('webroot').'/upload/'.date('Ym').'/'.date('d').'/';
if(!is_dir($tempFolder))
{
mkdir($tempFolder, 0777, TRUE);
mkdir($tempFolder.'chunks', 0777, TRUE);
}
Yii::import("ext.EFineUploader.qqFileUploader");
$uploader = new qqFileUploader();
$uploader->allowedExtensions = array('jpg','jpeg','png','gif');
$uploader->sizeLimit = 2 * 1024 * 1024;//maximum file size in bytes
$uploader->chunksFolder = $tempFolder.'chunks';
$ext = substr($_FILES['qqfile']['name'], strrpos($_FILES['qqfile']['name'],'.')) ;
$name = (microtime()*1000000).$ext;
$result = $uploader->handleUpload($tempFolder,$name);
$result['folder'] = $webFolder;
$result['filename'] = $tempDir.$name;
$uploadedFile=$tempFolder.$name;
header("Content-Type: text/plain");
$result=htmlspecialchars(json_encode($result), ENT_NOQUOTES);
echo $result;
Yii::app()->end();
}
我这里没有使用官方给出的示例,修改了上传的目录
此函数会返回一个JSON数组,在CALLBACKS里面可以用RESPONSE调用
所以我把callbacks数组里的oncomplete改成了
'onComplete'=>"js:function(id, name, response){ $('#VendorProducts_product_img').val(response.filename);$('#imgLink').attr('href',response.filename) }",
完成上传后进行的一系列浏览器端操作
NOTE:
PHP notice Undefined variable: postParams C:\xampp\htdocs\elibrary\public\protected\extensions\EFineUploader\EFineUploader.php(117) 117 $config['params']=$postParams;
可能会出现notice错误 解决方法是注释掉
EfineUploader.php 117行
相关文章推荐
- 某互联网企业技术发展史(四)配置nginx和mysql兼容Yii框架,上传网站并调试成功
- yii框架AR模式整合
- yii 框架的文件上传 (简单实现)
- 基于SSH2框架下jquery插件ajaxfileupload文件上传,下载,预览(.doc)实例
- Yii框架-Smarty-整合
- yii框架简单上传(不包含model层)
- PHP中整合UCHOME中上传头像插件
- 百度编辑器ueditor使用总结——基于Yii框架整合ueditor示例
- 框架学习之springMvc整合框架-02文件上传、下载、国际化、拦截器、异常框架
- Yii框架 上传图片接口
- JavaEE框架——Springmvc入门(注解URL核心类详解、文件上传和下载)、和Spring的整合
- SAE下整合头像上传插件
- 基于jquery ajax 无刷新 文件批量上传插件 GooUploader整合struts2实现上传
- PHP中整合UCHOME中上传头像插件
- Yii框架中文件上传
- 基于jquery ajax 无刷新 文件批量上传插件 GooUploader整合struts2实现上传
- js动态选择图片上传(带缩略图,可上传多张),在thinkphp框架中的整合(使用内置的upload类)
- 基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
- Kindeditor(jsp)与SSH三大框架整合上传图片出错问题解决方案