-
Notifications
You must be signed in to change notification settings - Fork 10
/
EAjaxUpload.php
104 lines (87 loc) · 4.36 KB
/
EAjaxUpload.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
/**
* EAjaxUpload class file.
* This extension is a wrapper of http://valums.com/ajax-upload/
*
* @author Vladimir Papaev <[email protected]>
* @version 0.1
* @license http://www.opensource.org/licenses/bsd-license.php
*/
/**
How to use:
view:
$this->widget('ext.EAjaxUpload.EAjaxUpload',
array(
'id'=>'uploadFile',
'config'=>array(
'action'=>'/controller/upload',
'allowedExtensions'=>array("jpg"),//array("jpg","jpeg","gif","exe","mov" and etc...
'sizeLimit'=>10*1024*1024,// maximum file size in bytes
'minSizeLimit'=>10*1024*1024,// minimum file size in bytes
'onComplete'=>"js:function(id, fileName, responseJSON){ alert(fileName); }",
//'messages'=>array(
// 'typeError'=>"{file} has invalid extension. Only {extensions} are allowed.",
// 'sizeError'=>"{file} is too large, maximum file size is {sizeLimit}.",
// 'minSizeError'=>"{file} is too small, minimum file size is {minSizeLimit}.",
// 'emptyError'=>"{file} is empty, please select files again without it.",
// 'onLeave'=>"The files are being uploaded, if you leave now the upload will be cancelled."
// ),
//'showMessage'=>"js:function(message){ alert(message); }"
)
));
controller:
public function actionUpload()
{
Yii::import("ext.EAjaxUpload.qqFileUploader");
$folder='upload/';// folder for uploaded files
$allowedExtensions = array("jpg"),//array("jpg","jpeg","gif","exe","mov" and etc...
$sizeLimit = 10 * 1024 * 1024;// maximum file size in bytes
$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
$result = $uploader->handleUpload($folder);
$result=htmlspecialchars(json_encode($result), ENT_NOQUOTES);
echo $result;// it's array
}
*/
class EAjaxUpload extends CWidget
{
public $id="fileUploader";
public $postParams=array();
public $config=array();
public $css=null;
public function run()
{
if(empty($this->config['action']))
{
throw new CException('EAjaxUpload: param "action" cannot be empty.');
}
if(empty($this->config['allowedExtensions']))
{
throw new CException('EAjaxUpload: param "allowedExtensions" cannot be empty.');
}
if(empty($this->config['sizeLimit']))
{
throw new CException('EAjaxUpload: param "sizeLimit" cannot be empty.');
}
unset($this->config['element']);
echo '<div id="'.$this->id.'"><noscript><p>Please enable JavaScript to use file uploader.</p></noscript></div>';
$assets = dirname(__FILE__).'/assets';
$baseUrl = Yii::app()->assetManager->publish($assets);
Yii::app()->clientScript->registerScriptFile($baseUrl . '/fileuploader.js', CClientScript::POS_HEAD);
$this->css=(!empty($this->css))?$this->css:$baseUrl.'/fileuploader.css';
Yii::app()->clientScript->registerCssFile($this->css);
$postParams = array('PHPSESSID'=>session_id(),'YII_CSRF_TOKEN'=>Yii::app()->request->csrfToken);
if(isset($this->postParams))
{
$postParams = array_merge($postParams, $this->postParams);
}
$config = array(
'element'=>'js:document.getElementById("'.$this->id.'")',
'debug'=>false,
'multiple'=>false
);
$config = array_merge($config, $this->config);
$config['params']=$postParams;
$config = CJavaScript::encode($config);
Yii::app()->getClientScript()->registerScript("FileUploader_".$this->id, "var FileUploader_".$this->id." = new qq.FileUploader($config); ",CClientScript::POS_LOAD);
}
}