Following code help your to upload multiple files using Yii CUploadedFile Class.
Model settings:
In your model class add rules for file tag validation. Then add a attribute to your file tag and name it as "files"
example:
class Gallery extends CActiveRecord
{
public $files;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'gallery';
}
public function rules()
{
return array(
array('files', 'file', 'types'=>'jpg, gif, png'),
array('files,asset_id','safe','on'=>"editrights")
);
}
}
In your Controller:
Create a object for your class model. Then render your upload view file with param of gallery object.
example:
// place this code inside your action
$model=new Gallery;
if(isset($_POST["Gallery"])) {
// form massive assignment
$model->attributes = $_POST["Gallery"];
// uploader dir
$dir = "uploads/gallery/";
// get the array of CUploadedFile objects per files //
$fileobjects = CUploadedFile::getInstances($model,'files');
/*
* without model object you place following code
* $filemodel = CUploadedFile::getInstances('Gallery[files]');
*/
foreach( $fileobjects as $file) {
// generate file name
$randno=rand(11111,99999);
$filename=$randno.$file->name;
$dirfile = $dir.$filename;
// save file in your location ensure your files dir is writable //
$file->saveAs($dirfile);
// save your file name
$save = new Gallery;
$save->name = $filename;
$save->type = $file->extensionName;
$save->save(false);
chmod($dirfile, 0777);
// if you want resize the image user following code //
//
if(preg_match('/image/',$file->type)) {
// use convert command for resize file before make sure you get installed imagegick tool //
echo exec("convert ".$file." -scale 220 ".$dir."thumb_".$filename);
}
}
$this->render("upload",array("model",$model));
In your view page:
Add file code in your form.
echo CHtml::activeFileField($model,'files[]',array("id"=>"files","multiple"=>true,"style"=>"margin-top:5px;"));
For more CUploadedFile options see CUploadedFile class reference