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