InicioBlog

16 marzo, 2025

Input File con Validaci贸n y Subida de Archivos en Laravel

#Laravel

implementar un input file con validaci贸n en Laravel. Descubre c贸mo subir archivos de forma segura, validar formatos y tama帽os, y almacenarlos en tu servidor. Tutorial

Input File con Validaci贸n y Subida de Archivos en Laravel

Suscr铆bete a nuestro canal en Youtube

Suscr铆birse

Subir archivos es una funcionalidad clave en aplicaciones web, pero su implementación requiere seguridad y precisión. En este tutorial, te enseñaremos cómo usar un input file en Laravel con validación tanto del lado del cliente como del servidor, y cómo almacenar archivos de manera eficiente.


1. Crear el Formulario con Blade

Para subir archivos, necesitas un formulario con enctype="multipart/form-data":

blade

<form action="{{ route('upload.file') }}" method="POST" enctype="multipart/form-data">

@csrf

<div class="form-group">

<label for="documento">Adjuntar archivo (PDF o Imagen):</label>

<input

type="file"

name="documento"

id="documento"

class="form-control @error('documento') is-invalid @enderror"

accept=".pdf,.jpg,.png" <!-- Filtra formatos en el cliente -->

>

@error('documento')

<div class="invalid-feedback">{{ $message }}</div>

@enderror

</div>

<button type="submit" class="btn btn-primary">Subir</button>

</form>


2. Validación en Laravel

La validación del lado del servidor es obligatoria para seguridad. En el controlador:

php

public function store(Request $request)

{

$request->validate([

'documento' => 'required|file|mimes:pdf,jpg,png|max:2048', // Máximo 2MB

]);

 

// Almacenar el archivo

$path = $request->file('documento')->store('uploads', 'public');

 

return redirect()->back()->with('success', '¡Archivo subido con éxito!');

}

Reglas de validación clave:

  • file: Verifica que el input sea un archivo.
  • mimes: Define formatos permitidos (ej: pdf, jpg).
  • max: Tamaño máximo en kilobytes (ej: 2048 = 2MB).

3. Almacenar Archivos de Forma Segura

Laravel simplifica el almacenamiento con el método store():

php

// Almacenar en el disco "public" (config/filesystems.php)

$path = $request->file('documento')->store('uploads', 'public');

 

// Personalizar el nombre del archivo

$nombreArchivo = time() . '_' . $request->file('documento')->getClientOriginalName();

$path = $request->file('documento')->storeAs('uploads', $nombreArchivo, 'public');

Crear un enlace simbólico para acceso público:

bash

php artisan storage:link


4. Mostrar el Archivo Subido

Para mostrar el archivo en una vista:

blade

@if(session('success'))

<div class="alert alert-success">{{ session('success') }}</div>

@endif

 

<!-- Enlace al archivo -->

<a href="{{ asset('storage/' . $path) }}" target="_blank">

Ver archivo subido

</a>


5. Mejoras y Buenas Prácticas

  1. Validación en el cliente:
    Usa el atributo accept en el input para filtrar formatos antes de subir.

    html

    <input type="file" accept=".pdf,image/*">

  2. Nombres únicos:
    Evita sobrescribir archivos usando time() o Str::uuid().

  3. Eliminar archivos temporales:
    Programa una tarea para limpiar archivos no usados:

    php

    // app/Console/Kernel.php

    protected function schedule(Schedule $schedule)

    {

    $schedule->command('files:clean')->daily();

    }

  4. Seguridad avanzada:
    Valida dimensiones de imágenes:

    php

    Copiar

    1

    'documento' => 'dimensions:min_width=800,min_height=600'


6. Errores Comunes y Soluciones

  • Error: "The uploaded file exceeds the maximum allowed size."
    Solución: Ajusta max en la validación y verifica upload_max_filesize en php.ini.

  • Error: "File not found."
    Solución: Verifica que el enlace simbólico (storage:link) esté creado.


Conclusión

Implementar un input file con validación en Laravel es sencillo si sigues estos pasos. Prioriza la seguridad validando siempre en el servidor, usa nombres únicos para evitar conflictos y programa limpiezas periódicas de archivos temporales. Con esta guía, estarás listo para gestionar subidas de archivos como un profesional.


Leido 761 veces | 0 usuarios

C贸digo fuente no disponible.

Compartir link del tutorial con tus amigos


Curso de Laravel b谩sico

USD 0.00

Descarga del c贸digo fuente

Curso de Laravel b谩sico

Codea Applications

M茅xico, Colombia, Espa帽a, Venezuela, Argentina, Bolivia, Per煤