Yii Framework Forum: Anomalia Upload File - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Anomalia Upload File impostando maxSize e/o estensioni consentite Rate Topic: -----

#1 User is offline   HuGoLiNo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 20-June 11

Posted 26 August 2011 - 11:03 AM

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!!!!
0

#2 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,342
  • Joined: 12-October 09
  • Location:Croatia

Posted 27 August 2011 - 02:11 PM

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();
}


Find more about me.... btw. Do you know your WAN IP?
0

#3 User is offline   HuGoLiNo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 20-June 11

Posted 29 August 2011 - 03:11 AM

View Postmdomba, on 27 August 2011 - 02:11 PM, said:

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!!!
:)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users