Subir archivos con Cakephp

 

En siguiente tutorial espero poder explicar de una manera clara como se pueden subir archivos utilizando Cakephp.

 

 

1. Donde deseamos subir nuestros archivos por ejemplo supongamos que tenemos que subir imágenes que  mostraran en alguna sesión de nuestro proyecto web. Por ejemplo webroot/uploads/.

2. Para el ejemplo el controlador  de nuestro sistema de upload de archivos se llamara uploadsController.php

3. Para este ejemplo  no guardare  información en la base de datos por lo cual no necesito trabajar con ningún modelo.

4 .La vista se guardara en la carpeta views con el nombre Uploads/index.ctp.

5. Iniciemos con el código de nuestra vista que sería el siguiente.

<div class="posts form">
<?php echo $this->Form->create('Upload',array('id' => 'formulario','type' => 'file')); ?>
    <fieldset>
        <legend><?php echo __('Subir Imagenes'); ?></legend>
    <?php
        echo $this->Form->input('archivo',array('type' => 'file'));
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>   

6. El código de nuestro controlador seria el siguiente.

 <?php

App::uses('AppController', 'Controller');

class UploadsController extends AppController {

/**
 * Metodo que carga las imagenes
 */
    public function index() {
        
        $this->Upload->create();
        
           if ($this->request->is('post')) {
               
            if( $this->data['Upload']['archivo']['error'] == 0 &&  $this->data['Upload']['archivo']['size'] > 0)
             {
                // Informacion del tipo de archivo subido $this->data['Upload']['archivo']['type']
                  $destino = WWW_ROOT.'uploads'.DS;
                  if(move_uploaded_file($archivo['tmp_name'], $destino.$archivo['name']))
                   {               
                      $this->Session->setFlash(__('El archivo se a guardado'));
                   }
                  else
                   {
                          $this->Session->setFlash(__('El archivo no se pudo subir, por favor intentelo de nuevo'));       
                   }
                   $this->redirect(array('action' => 'index'));
             }else{
                  $this->Session->setFlash(__('Error al intentar subir el archivo'));
              }
        }
        
    }
    
}
?>   

Si todo nos quedó bien al enviar el  formulario  nos debe se genera  el mensaje El archivo se ha guardado. Si verificamos en el directorio debiéramos ver la imagen enviada, esta es  la manera mas simple de subir archivos con Cakephp, claro no realice validaciones sobre el tipo de archivos y de mas pero hasta aquí el código funciona normal cualquier duda por aquí estaré  : )

    Excelente post muchas gracias he visto muchos tutoriales pero acá está muy práctico. Tengo una pregunta, y para ver los archivos subidos como en una especie de tabla con el VER al lado, sabes cómo se haría?

    Lo mas simple y practico seria una vez subido guardas la ruta del archivo y nombre en la base de datos para relacionarlo según me comentas.

    Disculpa mi ignorancia, apenas estoy aprendiendo esta herramienta "cakephp", pero tal como lo explicas aquí en este tutorial no me funciona el ejemplo porque hay cosas que no explicas y que tal vez para alguien que conoce muy bien la herramienta no sea necesario explicar, pero me gustaría saber que es lo que omites o que me falta para que el ejemplo funcione correctamente. Al ejecutar el ejemplo con las paginas UploadController.php y la vista index.ctp del ejemplo, este me pide un modelo de datos. Que debo hacer para incluir un modelo de datos vacio si no necesito una tabla en este caso.

    Hola, inicialmente gracias por visitar mi web el modelo lo debes cargar en el controlador según el caso por ejemplo. $this->loadModel('Articulo'); para relacionar lo que cargas con ese modelo o si en tu caso no quieres tener ningún modelo pondrías public $uses = array(); en el controlador con esto te debería funcionar

    Gracias Carlos por tu respuesta. Hice los cambios que me indicaste: "public $uses = array()", pero no me ha funcionado la vista que quiero para subir un archivo al servidor usando Cakephp. me gustaría que me enviaras, de ser posible, como ejemplo las paginas ya probadas de este caso para aplicarlo en mi proyecto de aprendizaje. El tipo de archivo no importa, podría ser archivos de text extensión txt. De antemano Gracias.

    hermano gracias por tu ayuda, pero me quisiera dar una sugerencia: sera muy bueno y de gran ayuda tener vídeos con a explicación... gracias, buen buena pagina.

    Lo tendre en cuenta

Añadir nuevo comentario

Resumen Firma

Carlos Hernan Aguilar Hurtado

Desarrollador WEB

Hola,Soy ingeniero informático radicado en la ciudad de Santiago de Cali orientado al trabajo con soluciones WEB, apasionado por la tecnología siempre en la búsqueda de herramientas y alternativas para mejorar el resultado de los objetivos que se presentan con el día a día.

Carlos Hernan Aguilar Hurtado