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 notice Undefined variable: postParams C:\xampp\htdocs\elibrary\public\protected\extensions\EFineUploader\EFineUploader.php(117) 117 $config['params']=$postParams;可能会出现notice错误 解决方法是注释掉
EfineUploader.php 117行