File Upload in Yii For File Upload and Save in Database and in physical folder you can use this code In View
beginWidget('CActiveForm', array( 'id'=>'files-form', 'enableAjaxValidation'=>false, 'htmlOptions' => array('enctype' => 'multipart/form-data'), )); ?> labelEx($model,'filename'); ?> error($model,'filename'); ?> endWidget(); ?>In controller Create Action
public function actionCreate() { $model=new files; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST['files'])) { $rnd = rand(0,9999); // use to generate random $model->attributes=$_POST['files']; $uploadedFile = CUploadedFile::getInstance($model, 'filename'); $fileName = "{$rnd}-{$uploadedFile}"; // random number + file name $model->filename = $fileName; $model->size = $uploadedFile->getSize(); //get size of file $model->file_type = $uploadedFile->getType(); //get type of file if($model->save()){ $uploadedFile->saveAs(Yii::app()->basePath.'/../uploads/fiels/'.$fileName); // image will uplode to rootDirectory/uploads/fiels/ $this->redirect(array('view','id'=>$model->id));} } $this->render('create',array( 'model'=>$model, )); }you can use this function to convert file size (Bytes) to KB and MB and store in db
/** * This function use to format Size Units * @param type $bytes * @return string */ function formatSizeUnits($bytes) { if ($bytes >= 1073741824) { $bytes = number_format($bytes / 1073741824, 2) . ' GB'; } elseif ($bytes >= 1048576) { $bytes = number_format($bytes / 1048576, 2) . ' MB'; } elseif ($bytes >= 1024) { $bytes = number_format($bytes / 1024, 2) . ' KB'; } elseif ($bytes > 1) { $bytes = $bytes . ' bytes'; } elseif ($bytes == 1) { $bytes = $bytes . ' byte'; } else { $bytes = '0 bytes'; } return }you can write This function in helpers\Core.php file and can call function using this code
$size= Core::formatSizeUnits($size); // $size is file sizeFor File Validation you can use CFileValidator