lunes, 15 de julio de 2013

Cargar y descargar archivos con CodeIgniter

Veamos cómo cargar y descarar archivos con CodeIgniter. Para este ejemplo vamos a llamar al proyecto ci_downloads; el helper que nos ayuda en concreto con esta tarea es: el Helper Download, pero también vamos a utilizar algunos otros para hacer este ejemplo más completo, donde también podamos cargar los archivos desde el mismo sistema.
Empezamos por crear un controlador llamado files.php dentro de: ci_downloads/application/controllers/ En el método constructor de files.php cargamos el Helper Download que es el que nos permite descargar los archivos a nuestro equipo, el Helper File para obtener los nombres de cada archivo y crearles un enlace para descargar, aparte de estos también utilizaremos los helpers: URL y HTML.

Código de files.php

<?php

class Files extends CI_Controller {

public function __construct() {
        parent::__construct();
        $this->load->helper(array('download', 'file', 'url', 'html', 'form'));
        $this->folder = 'uploads/';

        }
  
public function index()
    {
        $this->load->view('upload_form', array('error' => ' ' ));
    }

//************ CARGA DE ARCHIVOS  ****************  
public function do_upload()
    {    
        $config['upload_path'] = $this->folder;
        $config['allowed_types'] = 'zip|rar|pdf|docx|txt';
        $config['remove_spaces']=TRUE;
        $config['max_size']    = '2048';

        $this->load->library('upload', $config);

    if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());
            $this->load->view('upload_form', $error);
        }
        else
        {
            $data = array('upload_data' => $this->upload->data());
           $this->load->view('upload_success', $data);

        }

   }

public function info(){
  
    $files = get_filenames($this->folder, FALSE);
  
    if($files){
        $data['files']=$files;
           
        }else{
            $data['files']=NULL;
        }
   $this->load->view('filenames',$data);  

}
//************ DESCARGA DE ARCHIVOS ***********************

public function downloads($name){
        
       $data = file_get_contents($this->folder.$name);
       force_download($name,$data);
    
}
}
Ahora creamos 3 vistas en ci_dowloads/application/views/, la primera le llamamos upload_form.php, la segunda la llamamos upload_success.php y la última filenames.php

Código de upload_form.php

<html>
<head>
<title>Subir Archivos</title>
</head>
<body>  
<?=heading('Suba un archivo zip, rar, pdf, docx o txt', 3);?>
<?=$error;?>
<?=form_open_multipart('files/do_upload');?>
<input type="file" name="userfile" size="20" />
<br />
<input type="submit" value="Subir Archivo" />
<?=form_close()?>
<h5><?=br(1).anchor('files/info', 'Listado de archivos para descargar'); ?></h5>
</body>
</html>

Código de upload_success.php

<html>
<head>
<title>Exito</title>
</head>
<center>
<body>
<?=heading('El archivo se ha subido correctamente', 4);?>

<h5><?=anchor('files', 'Regresar'); ?></h5>
<h5><?=anchor('files/info', 'Listado de archivos para descargar'); ?></h5>

</body></center>
</html>

Código de filenames.php

<?php
 if($files){
     echo heading('Archivo(s) disponible(s) para descargar', 3);

      foreach($files as $file){
       
          echo anchor('files/downloads/'.$file, $file).br(1);
                 
      }
echo br(1).anchor('files', 'Subir otro archivo');   
 }else{

echo heading('No hay archivos para descargar', 3).anchor('files', 'Subir un Archivo');

 }
   
para terminar creamos una carpeta llamada uploads en la raíz del directorio principal ci_downloads/, y luego vamos a ci_downloads/application/config/ y abrimos routes.php y en la linea 41 definimos el controlador que va a cargar por defecto.
$route['default_controller'] = "files";
 Descargar archivos

2 comentarios :