YII框架下整合上传插件EFineUploader

来源:互联网 发布:淘宝静电手环有用吗 编辑:程序博客网 时间:2024/05/15 13:40

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:

PHP noticeUndefined variable: postParamsC:\xampp\htdocs\elibrary\public\protected\extensions\EFineUploader\EFineUploader.php(117)117         $config['params']=$postParams;
可能会出现notice错误 解决方法是注释掉

EfineUploader.php 117行

0 0
原创粉丝点击