Saltar al contenido

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

  1. Verifica tu versión de Laravel: Asegúrate de estar usando una versión en la que temporaryUrl funcione para el driver local (Laravel 9.19+).

  2. 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.

  3. 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.

  4. Revisa MinIO: Ten en cuenta que temporaryUrl podría no funcionar con MinIO si no tienes un endpoint público accesible.

  5. 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!

school Curso completo

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.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje