Yii Framework Forum: Rename Dei File - Yii Framework Forum

Jump to content

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

Rename Dei File Rate Topic: -----

#1 User is offline   lup0z 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 60
  • Joined: 02-May 11

Posted 09 November 2012 - 05:24 AM

Ciao a tutti,
ho creato un'actionCreate che permetta di fare l'upload delle immagini, salvando sul DB il nome del file che funziona esattamente come voglio.
Ora ho bisogno di rinominare il file in modo che, se l'utente carica due files con lo stesso nome, questo venga rinominato con un nome random così da evitare l'incongruenza tra i due file e per sostituire caratteri particolari come gli spazi con degli underscore.

Per fare questo, ho caricato l'estensione CFile, ma vi è sicuramente un'incongruenza tra i tipi di file.
Quella che segue è l'actionCreate:

public function actionCreate()
	{
		
		$model=new Articoli;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Articoli']))
		{
			$model->attributes=$_POST['Articoli'];
			
			//prende l'istanza dell'immagine che è stata caricata con POST (in questo caso)
			$model->image = CUploadedFile::getInstance($model, 'image');
			$c_image = $model->image;
			
			
			//rename
			$myfile = Yii::app()->file->set(Yii::getPathOfAlias('webroot').'/images/articoli/'.$model->image, true);
			$random = substr(number_format(time() * rand(),0,'',''),0,10);
			$myfile->rename($random);
			$model->image = $myfile; //->filename;
			//end rename
			
			if($model->save()){
				if(isset($c_image)){
					//nell'attributo "image" delal tabella, viene salvato il percorso del file
					$file = Yii::getPathOfAlias('webroot').'/images/articoli/'.$model->image;
					$model->image->saveAs($file);
					
					//Creo il thumbnail per l'anteprima
					$thumb = Yii::app()->phpThumb->create($file); //Yii::app()->baseUrl.'/images/articoli/'.$model->image
					$thumb->resize(128,128);
					$thumb->save(Yii::getPathOfAlias('webroot').'/images/articoli/thumbnails/thumb_'.$model->image);
					}//if
				}//if
				
			
			$this->redirect(array('view','id'=>$model->id));
		}
		
		
		
		$this->render('upload',array( //'create',array(
			'model'=>$model,
		)); 
}


Se eseguo il codice, Yii mi dà un'errore sul tipo:
"Object of class CFile could not be converted to string "

solo che non so come risolverlo.
0

#2 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 09 November 2012 - 01:49 PM

Non sarà perchè stai passando a $model->image un oggetto CFile invece della stringa contenente il nome del file?

Io faccio così

 	$uploadedFile=CUploadedFile::getInstance($model,'image');			
 	$rnd = rand(0,9999);  
 	$ext = $uploadedFile->getExtensionName();
	$fileName = "{$rnd}.{$ext}"; 
        $model->image = Yii::app()->params['image_folder'].$fileName;


Ciao ciao
0

#3 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 09 November 2012 - 07:13 PM

Io in genere faccio come Giacomo con la differenza che utilizzo la funzione md5 sulla data corrente più un numero casuale per generare il nome dell'immagine. Non mi limito ad usare solo il numero random perché è una soluzione poco scalabile se il numero di immagini aumenta.
0

#4 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 12 November 2012 - 04:39 AM

Io ho poca fantasia, e uso direttamente l'id autoincrement del file come elemento discriminante.
0

#5 User is offline   lup0z 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 60
  • Joined: 02-May 11

Posted 12 November 2012 - 10:06 AM

Quello che ottengo usando le righe di codice che mi avete suggerito è questo:

Quote

Fatal error: Call to a member function saveAs() on a non-object in D:\Inetpub\webs\fabriziocastaniacom\protected\controllers\ArticoliController.php on line 97



Il problema è dato dal momento in cui memorizzo informazioni su $model->image e quindi viene eseguito $model->image->saveAs($file) sul pezzo di codice:
if($model->save()){
                                if(isset($c_image)){
                                        //nell'attributo "image" delal tabella, viene salvato il percorso del file
                                        $file = Yii::getPathOfAlias('webroot').'/images/articoli/'.$model->image;
                                        $model->image->saveAs($file);
                                        
                                        //Creo il thumbnail per l'anteprima
                                        $thumb = Yii::app()->phpThumb->create($file); //Yii::app()->baseUrl.'/images/articoli/'.$model->image
                                        $thumb->resize(128,128);
                                        $thumb->save(Yii::getPathOfAlias('webroot').'/images/articoli/thumbnails/thumb_'.$model->image);
                                        }//if
                                }//if


Però così ottengo lo stesso errore di prima, purtroppo.
Comunque avevo passato il nome del file al posto dell'oggetto, usando $model->image = $myfile->filename ma il risultato non cambiava.

Una domanda: il seguente codice dovrebbe salvare il percorso intero del file?
$model->image = Yii::app()->params['image_folder'].$filename;

0

#6 User is offline   lup0z 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 60
  • Joined: 02-May 11

Posted 13 November 2012 - 06:49 AM

Ci rinuncio perché il progetto su cui sto lavorando dev'essere finito a breve quindi aggirerò il problema facendo un check con un validatore custom.
Infatti ora mi tocca aprire un altro topic a riguardo perché ho già problemi anche in quello (comunque più semplici, spero!).
Grazie comunque per l'aiuto.
Magari in futuro avrò bisogno di riaprire questa discussione o qualcuno ne avrà bisogno.
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