Fecha: 2026-04-19 - San Expedito   Calendario 2026  | Info

Blog Blog

Carga o upload de archivos con CodeIgniter

Autor: Andrés Cruz en Udemy   |   Comentarios: 0

Codeigniter ofrece una cantidad importante de librerías y funcionalidades para realizar diversas tareas para lo poco que pesa este famoso framework PHP.

En este artículo veremos cómo hacer un upload o carga de archivos empleando Codeigniter en conjunto con la librería nativa que ofrece para tal fin; con esto podemos cargar cualquier tipo de imágenes, archivos de textos comprimidos etc; en general, cualquier tipo de archivos que permitamos al momento de realizar la configuración.

Definiendo el formulario HTML básico para la carga de archivos

Lo primero que debemos hacer es definir el formulario en HTML básico como el siguiente:


	
	method="post" enctype="multipart/form-data">


El mismo lo guardaremos en la ubicación por defecto de las vistas:

application/views/subir_fichero.php

Codeigniter provee metodos para construir formularios (Form Helper) y para validarlos (Form Validation), pero los mismos no son tema principal de este artículo y por ende solo procedemos a mencionarlo; ya queda de su preferencia la forma en la que decida trabajarla.

Puntos importante del formulario para la subida de archivos o ficheros:

  • enctype="multipart/form-data": Este atributo especifica que la data del formulario va ha ser codificada cuando sea enviada al servidor; la presencia de este atributo es necesaria cuando se desea cargar (upload) archivos al servidor.
  • El nombre del input de tipo file; el cual será referenciado en el controller en Codeigniter; para este ejemplo será llamado mi_archivo.
  • El atributo action; especifica la página a la cual será enviada la data; es decir nuestro archivo.

Definiendo el controlador en Codeigniter

Para ello nos vamos a la carpeta controller de Codeigniter y creamos un controller o controlador (archivo PHP); para este ejemplo lo llamaremos archivo.php; en resumen, el controlador que emplearemos para subir o cargar el archivo lo ubicamos en:

application/controllers/archivo.php

Y tendrá el siguiente contenido:

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Archivo extends CI_Controller {

  public function index(){ 
        $this->load->view('subir_fichero');
   }

    function cargar_archivo() {

        $mi_archivo = 'mi_archivo';
        $config['upload_path'] = "uploads/";
        $config['file_name'] = "nombre_archivo";
        $config['allowed_types'] = "*";
        $config['max_size'] = "50000";
        $config['max_width'] = "2000";
        $config['max_height'] = "2000";

        $this->load->library('upload', $config);
        
        if (!$this->upload->do_upload($mi_archivo)) {
            //*** ocurrio un error
            $data['uploadError'] = $this->upload->display_errors();
            echo $this->upload->display_errors();
            return;
        }

        $data['uploadSuccess'] = $this->upload->data();
    }
}

Preferencias del archivo

El array $config indica preferencias para el archivo a cargar; las cuales pueden ser:

Preferencia Valor por defecto Opciones Descripción
upload_path None None La carpeta destino donde será cargado el archivo; asegúrese que la carpeta tenga permisos de escritura y la ruta empleada en la misma debe ser absoluta o relativa y no una URL.
allowed_types None None El mime del archivo; si vas a especificar más de una debes de separarlos por pipes ('|').
file_name None   El nombre que tendrá el archivo al ser depositado en la carpeta.
overwrite FALSE TRUE/FALSE (boolean) TRUE para sobrescribir archivos con el mismo nombre en la carpeta destino y FALSE en caso contrario.
max_size 0 None El máximo tamaño (en kilobytes) que puede tener el archivo. Establecer en cero para que no haya límites.
max_width 0 None En el caso de imágenes, este valor indica la máxima anchura en píxeles que pueden tener las imágenes; cero para no establecer un límite.
max_height 0 None En el caso de imágenes, este valor indica la máxima altura en píxeles que pueden tener las imágenes; cero para no establecer un límite.
max_filename 0 None La máxima longitud que puede tener el nombre del archivo; cero para no establecer un límite.
encrypt_name FALSE TRUE/FALSE (boolean) TRUE para que el archivo sea encriptado.
remove_spaces TRUE TRUE/FALSE (boolean) TRUE para remover espacios en el nombre del archivo.

Inicializamos la clase Upload

La función $this->load->library permite inicializar la clase Upload en nuestro controlador pasando como uno de sus parámetros la configuración.

La función do_upload(?)

Luego de configuradas las preferencias del archivo, el siguiente paso es cargar el mismo para ello empleamos la función $this->upload->do_upload($mi_archivo) cuyo parámetro es el nombre del archivo; la misma retorna un booleano que indica si se cargó o no el archivo:

  • TRUE: La subida del archivo fué exitosa y podemos obtener data de la carga del mismo mediante la función $this->upload->data().
  • FALSE: La subida del archivo NO fué exitosa y podemos obtener el error mediante la función $this->upload->display_errors().

Definiendo el controlador para la carga de una imagen

Si quisiéramos hacer el upload de una imagen podríamos utilizar el siguiente código en nuestro controller:

function cargar_archivo() {
    $mi_imagen = 'mi_imagen';
    $config['upload_path'] = "uploads/";
    $config['file_name'] = "nombre_archivo";
    $config['allowed_types'] = "gif|jpg|jpeg|png";
    $config['max_size'] = "50000";
    $config['max_width'] = "2000";
    $config['max_height'] = "2000";

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

    if (!$this->upload->do_upload($mi_imagen)) {
        //*** ocurrio un error
        $data['uploadError'] = $this->upload->display_errors();
        echo $this->upload->display_errors();
        return;
    }

    $data['uploadSuccess'] = $this->upload->data();
    }

Como puedes ver con el código anterior podemos realizar el upload de la imagen con php y Codeigniter

También puedes revisar otro artículo en donde hablamos de cómo cargar o subir múltiples archivos con Codeigniter y DropZone vía Ajax.

Extra: Escalando una imagen guardada o cargada

Una vez cargada, podemos disparar un proceso que se encargue de reescalar la imagen si el tipo de archivos que se está cargando es una imagen; para eso en el método cargar_archivo() al final del mismo verificamos en base a los datos de carga de la imagen, la extensión del archivo a cargar:

if ($data['file_ext'] == ".jpg" || $data['file_ext'] == ".png" || $data['file_ext'] == ".jpeg" || $data['file_ext'] == ".gif") {
$this->foto_redimencionar($data['full_path'], $data['file_name'], $dir);
}

Finalmente, el método para reescalar la imagen:

private function foto_redimencionar($ruta, $nombre, $dir) {
	$config['image_library'] = 'gd2';
	$config['source_image'] = $ruta;
	$config['new_image'] = $dir . '/' . $nombre;
	$config['maintain_ratio'] = TRUE;
	$config['height'] = 300;

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

	if (!$this->image_lib->resize()) {
		echo $this->image_lib->display_errors();
	}
}


Su Comentario:

Deje aquí su comentario acerca de este artículo...


Otros artículos del blog

¿Qué precio tiene hacer el diseño de tu página Web?
¿Cómo crear una API REST con CodeIgniter?
¿Cómo redimensionar imágenes con CodeIgniter?
¿Qué documentos necesitas para solicitar la ayuda como emigrante retornado?
¿Qué es y para qué sirve un archivo robots.txt?
Adapta tu sitio web a la nueva normativa sobre cookies
Atributo download HTML5 para descargar archivos del servidor mediante enlaces
Botón redondeado con CSS
Bucle para recibir todas las variables por POST en PHP
Carga o upload de archivos con CodeIgniter
Columnas múltiples con CSS3
Como evitar la inyección SQL en PHP
Cómo optimizar la cabecera de una página web para SEO: guía avanzada y completa
Cómo optimizar la etiqueta de título para atraer más tráfico de Google
Como puedo abrir puertos en mi router para acceder remotamente a mi ordenador personal
Contador de caracteres con JQuery
Copias de seguridad avanzadas para bases de datos MySQL
Creando fácilmente imágenes de relleno para tus prototipos
Crear un sticky desplegable en la web
Detectar el sistema operativo, navegador y versión del cliente
Diseño y desarrollo web a la medida
Ejecutar script automáticamente con Cron en Linux
El elemento meter HTML5
El filtro Blur (desenfoque) en CSS y alguno de sus posibles usos
El nuevo elemento <picture> de HTML5 para crear imágenes responsive
Elementos fundamentales para trabajar con Codeingniter
Envío de correos o emails con CodeIgniter, guía rápida
Función para extraer la extensión de un archivo con PHP
Guía rápida sobre el elemento br en HTML
Guía rápida sobre el elemento p en HTML
Guía rápida sobre los bordes en CSS
La etiqueta meta viewport en html5
La relación entre el contenido extenso y el convencimiento del usuario
Las fuentes de Google Font para nuestra web y efectos sobre nuestras fuentes
Lo bueno y lo malo del SEO
Los helpers en CodeIgniter para definir nuestras funciones
Mensaje aceptar cookies para cumplir con la Ley General de Protección de Datos (LGPD)
Meta tags de HTML
Múltiples bordes en un contenedor con CSS
Script para automatizar backups de MySQL en servidores Windows
Streams en PHP
Trucos y ejemplos de configuración del archivo htaccess de Apache
Uso de las páginas de error 404 como soporte estratégico de contenidos