Pequeño gestor de ficheros en CodeIgniter 4

Veamos un pequeño ejemplo en el que desarrollaremos un gestor de ficheros en CodeIgniter 4.

Tutoriales CodeIgniter

Como siempre, debéis coger el código como una referencia. El que os vamos a facilitar es muy sencillo, pero os puede dar ideas para ir potenciándolo y hacerlo mucho más funcional.

Os voy a dejar un código, que posteriormente lo deberéis adaptar a vuestra estructura.

Controller

Veamos el controlador con las tres funciones básicas: listar ficheros, eliminar y subir fichero. Es la parte esencial y en la que os debéis fijar. Aquí está «to el pescao».

<?php
namespace App\Modules\Filemanager\Controllers;

use App\Controllers\BaseControllerSuper;
use App\Models\ToolsModel;
use Config\Miconfiguracion;

class Filemanager extends BaseControllerSuper
{
    private $files_url;

    public function __construct()
    {
      $this->files_url = "./public/download/";
    }

    public function index()
    {
      if ( $this->estaLoguinado() ) {
        helper('filesystem');

        $data = [
          'files' => get_dir_file_info($this->files_url, 1)
        ];

        return view('\App\Modules\Filemanager\Views\filemanager', $data);
      } else {
        return redirect()->to('/admin/login');
      }
    }

    public function deleteFile()
    {
      if ( $this->estaLoguinado() ) {
        helper('filesystem');

        $file_to_delete= $this->request->getGet("file");

        if (unlink($this->files_url . $file_to_delete)){
          $task= "ok";
        } else {
          $task= "ko";
        }

        return redirect()->to('/admin/filemanager');
      } else {
        return redirect()->to('/admin/login');
      }
    }

    public function uploadFile()
    {
      if ( $this->estaLoguinat() ) {
        helper('filesystem');

        $validationRule = [
          'file_to_upload' => [
              'label' => 'File to upload',
              'rules' => 'uploaded[file_to_upload]'
                  . '|mime_in[file_to_upload,image/jpg,image/jpeg,image/gif,image/png,image/webp,application/pdf,application/zip]'
                  . '|max_size[file_to_upload,1500]',
          ],
        ];
        
        if ( $this->validate($validationRule) ) {
          $x_file = $this->request->getFile('file_to_upload');
          $x_file->move(FCPATH . $this->files_url . '/');
        }
        
        return redirect()->to('/admin/filemanager');
      } else {
        return redirect()->to('/admin/login');
      }  
    }

}

De este código, os tenéis que quedar con:

helper(‘filesystem’);

Cargamos la librería que nos permite trabajar con los ficheros.

‘files’ => get_dir_file_info($this->files_url, 1)

Esta función devuelve un array con la estructura de carpetas y ficheros del enlace que les pases.

unlink($this->files_url . $file_to_delete)

Función encargada de eliminar el fichero

$x_file = $this->request->getFile(‘file_to_upload’);
$x_file->move(FCPATH . $this->files_url . ‘/’);

Estas dos acciones son las encargadas de recibir el fichero y moverlo a la carpeta que queramos (que normalmente debe ser una carpeta con permisos de escritura).

View

Veamos las tres acciones de listar, crear y eliminar que debemos poner en la vista:

Creación

<form action="<?php echo base_url("/admin/filemanager/uploadFile"); ?>" method="post" class="" enctype='multipart/form-data'>
  <input type="file" name="file_to_upload" id="file_to_upload" />
  <input type="submit" value="Enviar fichero" />
</form>

Listado

<?php
foreach ($files as $fic) {
echo "<tr>";
echo "<td>". $fic["name"] ."</td>";
echo "<td>". $fic["size"]/1000 ." Kb</td>";
echo "<td>". date("d/m/Y", $fic["date"]) ."</td>";
echo "<td>". base_url("/public/download/". $fic["name"]) ."</td>";
echo "</tr>";
}
?>

Eliminado

echo "<td>";
echo "<a href='". base_url("/admin/filemanager/deleteFile?file=". $fic["name"] ) ."'>Borrar</a>";
echo </td>";

Ya os avanzo, que debéis coger el código como referencia para que os de una idea. A partir de aquí debéis adaptarlo. Si copiais y pegáis, no funcionará. Las carpetas destino de los ficheros a subir, listar o borrar pueden cambiar.

Espero que este artículo os de idéas para crear vuestro gestor de ficheros en CodeIgniter 4.

Más información