Anomalia Upload File

Salve a tutti di nuovo…spero abbiate assato un buon agosto!!

Ho riscontrato una anomalia o comunque una cosa che non mi spiego, lavorando con l’Upload dei Files.

Tentando di mandare in upload un file che non abbia i requisiti (dimensione o estensione) di validità, Yii mi segnala a video ovviamente la non idoneità del file…ma andando a vedere nella cartella dove ci sono i files uploadati, lo trovo li!!

Mi sono accorto di questa cosa perchè ho impostato una verifica di univocità del nome del file in fase di upload e, dopo aver ricevuto quindi il primo errore sull’errata dimensione o estensione, al secondo tentativo ricevevo invece l’errore di file già esistente.

Il problema sta nel fatto che non capisco quando Yii realmente salva il file…e quindi cosa devo intercettare per eliminarlo nel caso la validazione non sia avvenuta.

Di seguito un po di codice relativo ai Model e Controller relativi:

MODEL




public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('titolo', 'required'),

			array('guid, guid_record', 'length', 'max'=>45),

			array('filename', 'file', 'types'=>'jpg, gif, png, doc, txt, pdf, odt, zip, rar', 'maxSize'=>500000, 'allowEmpty'=>false, 'on' => 'insert'),

			array('model_padre, nome_padre, titolo, descrizione, directory', 'length', 'max'=>255),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('id_file, guid, model_padre, guid_record, titolo, descrizione, directory, filename', 'safe', 'on'=>'search'),

		);

	}



CONTROLLER




public function actionCreate()

	{

		$model=new Files;


		$this->performAjaxValidation($model);


		if(isset($_POST['Files']))

		{

			$model->attributes=$_POST['Files'];

		

			$file_up = CUploadedFile::getInstance($model,'filename');

 

            if ( (is_object($file_up) && get_class($file_up)==='CUploadedFile')) {

                $model->filename = $file_up;

			}

			

			if (is_object($file_up)) {

				// if not exists directories, create them

				if (!file_exists((Yii::app()->params['pathToSave']. $model->directory .'/'))) {

					if (!mkdir(Yii::app()->params['pathToSave']. $model->directory .'/', 0777, true)) {

						Yii::app()->user->setFlash('error', Yii::t('app','Cannot create directory.'));

						$this->redirect(array('files/admin?'.$_SERVER['QUERY_STRING']));

					}

				}

				// if exists file, give error

				if (file_exists((Yii::app()->params['pathToSave']. $model->directory .'/'. $model->filename))) {

					Yii::app()->user->setFlash('error', Yii::t('app','Selected file already exists.'));

					$this->redirect(array('files/admin?'.$_SERVER['QUERY_STRING']));

				} else {

					if($model->filename->saveAs(Yii::app()->params['pathToSave']. $model->directory .'/'. $model->filename)) {

						if($model->save()) {

							$this->redirect(array('files/admin?'.$_SERVER['QUERY_STRING']));

						}

					}

				}

			}

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}



Ho provato a mettere la funzione di unlink del file creando vari ELSE agli IF dove salva il model e dove salva il file…ma niente…anche se non salva il model (nel DB i dati non li salva davvero) il file lo salva e lo lascia li!! :(

Grazie a tutti per l’aiuto!!!!

Il file lo salvi con $model->filename->saveA(…)… e sicome lo esegui prima di $model->save()… ti capita che il file viene salvato… pero i dati no (se che un errore nella validazione)…

Dovresti prima validate i dati… .e poi salvare i dati e il file… qualcosa come




if($model->validate()

{

   $model->save();

   $model->filename->saveAs();

}



Grazie mille mdomba…ora ho capito e risolto!!!

:)