Cómo validar ficheros subidos con CodeIgniter

CodeIgniter te proporciona una clase que te ayuda a validar los campos de los formularios con muy poco código. Generalmente, solemos utilizar la regla required para validar un campo obligatorio. Pero la regla required no funciona si lo que quieres validar es un fichero que el usuario sube a través de un formulario en CodeIgniter. En este tutorial, te mostraré cómo validar ficheros subidos con CodeIgniter.

Para que lo entiendas mejor, en este ejemplo veremos el proceso completo de subida de ficheros validando el propio fichero antes de subirlo al servidor. Utilizando este ejemplo serças capaz de implementar la función de subir archivos a tu servidor previa validación en CodeIgniter.

Antes de empezar, vamos a ver la estructura de directorios y ficheros del proyecto:

codeigniter
> application
>> controllers
>>> Files.php
>> views
>>> files
>>>> upload.php
> uploads
>> files

Directorio upload

Debes crear un directorio para almacenar los ficheros que subas. Para ello, en este ejemplo hemos creado la carpeta uploads/files/

Controlador (Files.php)

El controlador Files contiene dos funciones, upload() y file_check().

La función upload() gestiona lo siguiente:

  • Carga el fichero del formulario
  • Valida el campo para ver si está vacío o si el archivo no es correcto
  • Sube el fichero enviado al servidor

La función file_check() es una función callback() que comprueba si el fichero está vacío o no es correcto.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Files management class created by CodexWorld
 */
class Files extends CI_Controller {
    
    function __construct() {
        parent::__construct();
    }
    
    public function upload(){
        $data = array();
        
        //load form validation library
        $this->load->library('form_validation');
        
        //load file helper
        $this->load->helper('file');
        
        if($this->input->post('uploadFile')){
            $this->form_validation->set_rules('file', '', 'callback_file_check');

            if($this->form_validation->run() == true){
                //upload configuration
                $config['upload_path']   = 'uploads/files/';
                $config['allowed_types'] = 'gif|jpg|png|pdf';
                $config['max_size']      = 1024;
                $this->load->library('upload', $config);
                //upload file to directory
                if($this->upload->do_upload('file')){
                    $uploadData = $this->upload->data();
                    $uploadedFile = $uploadData['file_name'];
                    
                    /*
                     *insert file information into the database
                     *.......
                     */
                    
                    $data['success_msg'] = 'File has been uploaded successfully.';
                }else{
                    $data['error_msg'] = $this->upload->display_errors();
                }
            }
        }
        
        //load the view
        $this->load->view('files/upload', $data);
    }
    
    /*
     * file value and type check during validation
     */
    public function file_check($str){
        $allowed_mime_type_arr = array('application/pdf','image/gif','image/jpeg','image/pjpeg','image/png','image/x-png');
        $mime = get_mime_by_extension($_FILES['file']['name']);
        if(isset($_FILES['file']['name']) && $_FILES['file']['name']!=""){
            if(in_array($mime, $allowed_mime_type_arr)){
                return true;
            }else{
                $this->form_validation->set_message('file_check', 'Please select only pdf/gif/jpg/png file.');
                return false;
            }
        }else{
            $this->form_validation->set_message('file_check', 'Please choose a file to upload.');
            return false;
        }
    }
}

Vista (files/upload.php)

La vista contiene un formulario HTML que permite al usuario seleccionar un fichero para subirlo al servidor. El formulario se envía al método upload() del controlador Files para validarlo y subirlo.

<?php 
    if(!empty($success_msg)){
        echo '<p class="statusMsg">'.$success_msg.'</p>';
    }elseif(!empty($error_msg)){
        echo '<p class="statusMsg">'.$error_msg.'</p>';
    }
?>

<form method="post" enctype="multipart/form-data">
    <p><input type="file" name="file"/></p>
    <?php echo form_error('file','<p class="help-block">','</p>'); ?>
    <p><input type="submit" name="uploadFile" value="UPLOAD"/></p>
</form>

Fuente: codexworld.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP