Las URLs temporales son útiles cuando quieres compartir un enlace a un archivo pero necesitas que caduque después de un tiempo determinado o tener un control más granular de su acceso. A partir de Laravel 9.19 en adelante, la funcionalidad se ha ampliado para que también sea posible usar temporaryUrl en el driver local, aunque con algunas limitaciones.
1. ¿Qué es temporaryUrl en Laravel?
temporaryUrl es un método disponible en Laravel para generar un enlace temporal a un archivo almacenado en distintos drivers del sistema de archivos, como S3 o Local. El enlace tendrá una fecha de expiración que, una vez superada, hará que el archivo deje de ser accesible públicamente.
Ejemplo básico (Amazon S3)
Si tu disk está configurado para s3:
En este ejemplo, el enlace expirará en 30 minutos. Antes de Laravel 9.19 (aproximadamente), esta funcionalidad estaba disponible únicamente para S3, pero ahora también se puede usar en el driver local (con ciertas restricciones).
2. Usando temporaryUrl con el Driver Local
Laravel ha introducido la posibilidad de generar URLs temporales en el driver local, aunque no es tan “automático” como en S3. Generalmente, se basa en la firma de rutas y la configuración de rutas personalizadas.
Limitaciones
No expone automáticamente el archivo de tu disco local con un enlace HTTP válido para usuarios externos.
Necesitas definir cómo se generará esa URL temporalmente firmada (por ejemplo, con
URL::temporarySignedRoute).
Ejemplo de Configuración
En tu AppServiceProvider o en un provider de tu preferencia, puedes añadir lo siguiente:
buildTemporaryUrlsUsing: Indica cómo se generará la URL firmada.URL::temporarySignedRoute: Crea una ruta temporal y firmada, válida hasta$expiration.
Definir la Ruta para la Descarga
Necesitarás una ruta para manejar la descarga del archivo firmado:
Con esto, cuando un usuario acceda a la URL firmada, Laravel verificará si todavía está dentro del tiempo válido ($expiration). Si la firma ha caducado o es inválida, se lanzará un error 403.
3. Consideraciones sobre MinIO
En la documentación oficial de Laravel se menciona que generar URLs temporales a través de temporaryUrl puede no funcionar adecuadamente con MinIO si el endpoint de MinIO no es accesible de forma pública por el cliente. Asegúrate de verificar la configuración de tu servidor o endpoint si planeas usar MinIO como almacenamiento S3-compatible.
4. El método temporaryUploadUrl (Solo con S3)
Además de temporaryUrl, Laravel introdujo el método temporaryUploadUrl. Este permite generar un enlace temporal que los usuarios pueden utilizar para subir archivos directamente a S3 sin pasar por tu servidor. Es ideal para optimizar recursos en tu app evitando sobrecarga de tu servidor principal.
Nota: Actualmente, solo el driver S3 soporta
temporaryUploadUrl. Si usas local o algún otro sistema de archivos, no estará disponible.
Ejemplo Rápido
5. Buenas Prácticas y Resumen
Verifica tu versión de Laravel: Asegúrate de estar usando una versión en la que
temporaryUrlfuncione para el driver local (Laravel 9.19+).Define Rutas Firmadas: Para el driver local, configura tu lógica de generación de URLs firmadas y crea una ruta para manejar la descarga.
Considera S3 o un servicio compatible: Para compartir archivos de manera externa, S3 y servicios compatibles (DigitalOcean Spaces, etc.) resultan más sencillos. Con local, todavía deberás exponer y firmar rutas manualmente.
Revisa MinIO: Ten en cuenta que
temporaryUrlpodría no funcionar con MinIO si no tienes un endpoint público accesible.Usa
temporaryUploadUrl: Si necesitas subir archivos de manera directa a S3, aprovecha este método para optimizar tu flujo de trabajo.
6. Profundiza con la Ruta de Aprendizaje Laravel 11
Si deseas ampliar tu conocimiento sobre Laravel, te recomiendo visitar la Ruta de Aprendizaje Laravel 11, donde encontrarás cursos, tutoriales y ejemplos prácticos para exprimir al máximo las últimas versiones del framework.
Conclusión
Generar URLs temporales es una función muy útil para compartir, descargar o incluso subir archivos con vencimiento. En S3, temporaryUrl funciona de forma nativa y sin mayor configuración adicional; mientras que, con el driver local, deberás personalizar tu propia lógica de firma y expiración.
Aprovecha esta característica para mejorar la seguridad y flexibilidad de tu aplicación, evitando que archivos estén disponibles indefinidamente, y mantén tu proyecto actualizado con las últimas mejoras de Laravel.
¿Ya has implementado URLs temporales en tu aplicación? ¡Comparte tu experiencia con tus colegas y no olvides explorar la Ruta de Aprendizaje Laravel 11!
Curso Laravel 12
Completo 2026
El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.
star Incluido en cualquier suscripción