Yii Framework Forum: Subir archivos pero como le cambiamos el nombre? - Yii Framework Forum

Jump to content

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

Subir archivos pero como le cambiamos el nombre? como cambiarle el nombre a los archivos subidos? Rate Topic: ***-- 1 Votes

#1 User is offline   morpheus747 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 16
  • Joined: 19-February 10

Posted 30 May 2010 - 12:36 AM

Tengo el siguiente problema he logrado de forma perfecta subir archivos.
en mi base de datos yo tengo que subir los curriculums de la gente.
en formato doc, pdf y odt
los formatos la subida todo perfecto cuando le doy almacenar la base de datos
tiene un campo llamado cv que guarda el nombre del archivo en su registro
mi problema consiste en que cuando subo 2 archivos con el mismo nombre y extension
se sobre-escriben
tengo el siguiente codigo
<?php
     
     class RegistroController extends Controller
{

	public function actionIndex()
	{
	$model = new Usuarios;
	$form = new CForm('application.views.forms.registro.registroForm',$model);
	if($form->submitted('registrar') && $form->validate())
		{
		$model->attributes = $form->elements;
		$model->cv=CUploadedFile::getInstance($model,'cv');
		$model->cv->name = time().$model->cv->name;
		if ($model->save())
		{
		echo $model->cv;
		$model->cv->saveAs('cv/'.$model->cv);
		}
		/*$this->redirect(array('site/index'));*/
		}
	else
		$this->render('index',array('registro'=>$form));
	}

}

?>


noten y perdonen que el temita tiene algunas trazas que le hice de pruebas
el caso es que quiero lograr usar TIME() para ponele nombres a los archivos
y que no se repitan.
y cuando lo intento me dice el siguiente error
CException
Description

Property "CUploadedFile.name" is read only.

evidentemente fui a las API y veo que es read only ese argumento ahora me pregunto
como puedo cambiarlo? para que en la bd se guarde con el nombre parecido a
123123123cv.doc
por ejemplo
y que el archivo fisicamente se almacene igual que en la Db para luego yo ir a buscarlo???
porfavor si me lo ayudan a resolver les estaré agradecidos.
0

#2 User is offline   netbur 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 03-June 09

Posted 31 May 2010 - 05:56 AM

Aquí te dejo una función de mi aplicación en la que hago algo parecido :

public function actionUpdate()
	{
		$model=$this->loadusuario();
		
		if($model->id != Yii::app()->user->id && Yii::app()->user->getState("tipo")!=0)
				throw new CHttpException(500,'Se ha producido un error.');
		
		
		if(isset($_POST['usuario']))
		{
			$model->attributes=$_POST['usuario'];
			$model->avatar = strtolower($model->avatar);
			$logo = CUploadedFile::getInstance($model,'avatar');
			
			if($logo){				
			
				$ext = substr($logo->name, strpos($logo->name,"."),strlen($logo->name));
				$model->avatar= "avatar_".$model->id.strtolower($ext);
				
				if($model->save())
				{
					$logo->saveAs('images/uploads/'.$model->avatar);
					$image = Yii::app()->image->load('images/uploads/'.$model->avatar);
					$image->resize(50, 50, Image::WIDTH)->quality(75);
					$image->save();
					$this->redirect(Yii::app()->urlManager->createUrl('/usuario/show',array('id'=>$model->id)));
				}				
			}
			else{
				
				if($model->save())
					$this->redirect(Yii::app()->urlManager->createUrl('/usuario/show',array('id'=>$articulo->id)));
			}
		
		
		}
		$this->render('update',array('model'=>$model));
	}


No se si es la mejor manera, lo que yo hago es guardar la ruta en $model->avatar creando el nombre que quiero.
0

#3 User is offline   Jack Fiallos 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 256
  • Joined: 15-October 09
  • Location:Mexico

Posted 31 May 2010 - 11:16 PM

Ya intentaste hacer algo mas sencillo como lo siguiente, digo solo para hacer la prueba..

$archivo = CUploadedFile::getInstance($model,'cv');
$model->cv->name = $archivo->name."_".time();

Celestic Dev Team
Yii Open Source Project Manager
0

#4 User is offline   Junior - df9 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 416
  • Joined: 24-May 09
  • Location:Brazil

Posted 02 June 2010 - 06:23 AM

Hey!

I've extended CFileHelper and added some little methods to handle this, like

<?php
class MyFileHelper extends CFileHelper{

    public static function deleteFile($path){
        return unlink($path);
    }


    public static function extractZipFile($zipFile,$pathToSave){
        $zip = new ZipArchive();
        if ($zip) {
            if (($zip->open($zipFile)) && ($zip->extractTo($pathToSave))){
                $zip->close();
                return true;
            }
        }
        return false;
    }


    public static function createDir($path, $recursive){
        if (!is_dir($path)) {
            return @mkdir($path, 0755, $recursive);
        }
        return false;
    }


    public static function renameFile($oldName, $newName){
        if (file_exists($oldName))
            return rename($oldName,$newName);

        return false;
    }

    public static function deleteDir($dirName){
        if (is_dir($dirName))
            $dir_handle = opendir($dirName);

        if (!$dir_handle)
            return false;

        while($file = readdir($dir_handle)) {
            if ($file != "." && $file != "..") {
                if (!is_dir($dirName."/".$file))
                    unlink($dirName."/".$file);
                else
                    self::deleteDir($dirName.'/'.$file);
            }
        }

        closedir($dir_handle);
        rmdir($dirName);
        return true;
    }

}
?>




Put this in a file under protected/components and use like:

MyFileHelper::renameFile($oldName, $newName);


Hope it helps!

:)
______________________________________
Junior
df9.com.br
Linux Registered User #364954
GNU/Linux: together we're ready!
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