16 marzo, 2025
Input File con Validaci贸n y Subida de Archivos en 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

Suscr铆bete a nuestro canal en Youtube
Suscr铆birseSubir 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
-
Validación en el cliente:
Usa el atributoaccept
en el input para filtrar formatos antes de subir.html
<input type="file" accept=".pdf,image/*">
-
Nombres únicos:
Evita sobrescribir archivos usandotime()
oStr::uuid()
. -
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();
}
-
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: Ajustamax
en la validación y verificaupload_max_filesize
enphp.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.