¿Quieres subir imágenes en tu API de Laravel y asegurarte de que solo acepte el formato correcto? Aquí aprendes a procesar un archivo de imagen desde el controlador, guardarlo de forma ordenada y agregar validación para que nadie suba un archivo inválido. Es ideal si ya trabajas con un CRUD de recetas y quieres completar su proceso administrativo.
Cómo subo una imagen como archivo en lugar de texto
El primer cambio sucede en el controlador. En vez de tratar la imagen como un simple texto, la manejamos como un archivo real que viaja dentro de la solicitud.
Para esto usamos la clase Request, que administra toda la conexión y los datos que enviamos. El método clave es file, que recupera el archivo asociado al campo imagen que el usuario está subiendo.
Una vez que capturamos el archivo, lo subimos con el método store. La ventaja de store es que guarda todo de forma ordenada dentro de una carpeta. En el ejemplo, la imagen se almacena en una carpeta llamada Recetas, ubicada dentro de Public.
¿Qué hace el método store en Laravel? Toma el archivo recibido y lo guarda automáticamente en la ruta que le indicas. Si le pasas la carpeta Recetas dentro de Public, Laravel crea esa estructura y devuelve la ruta donde quedó el archivo.
Como estamos actualizando el campo, el último paso es indicarle que guarde los cambios. Con eso, la imagen queda registrada y Laravel genera la carpeta automáticamente la primera vez que subes un archivo.
Cómo pruebo la subida de imágenes en Postman
Aquí viene lo interesante: para probar que todo funciona necesitas estar autenticado. El ejemplo reutiliza la misma conexión porque la sesión ya está logueada con un token activo.
El detalle que suele confundir es que Postman, por defecto, acepta el campo como texto. Para subir una imagen real sigue estos pasos:
- Cambia el método de delete a post.
- Pasa el cursor sobre el campo de imagen hasta que aparezca el icono para cambiar su tipo.
- Haz clic y cambia la opción de text a file.
- Selecciona el archivo con open y envía la información.
Al enviarlo, el resultado te muestra cómo se guarda la ruta de la imagen y confirma que la carpeta y el archivo se crearon correctamente en el proyecto.
Cómo valido que el archivo sea realmente una imagen
Subir archivos sin control es un riesgo. Por eso agregamos una capa extra de seguridad desde el sistema de validación dentro de Request.
La regla es sencilla: le decimos que el campo imagen es obligatorio y que además debe ser una imagen. Puedes afinar el formato esperado, por ejemplo validando contra JPG. Si alguien intenta subir un archivo que no cumple, la validación lo rechaza de inmediato.
En la demostración, al configurar la regla para JPG y subir un archivo PNG, el sistema responde directamente que lo que intentas subir no es JPG. Al corregir la regla a PNG y reenviar, la respuesta confirma que se creó la receta 107. Ese contraste entre el rechazo y la creación exitosa muestra cómo la validación protege tu base de datos.
¿Cómo valido que un campo sea una imagen en Laravel? Dentro de las reglas de Request defines el campo como obligatorio y como image. También puedes especificar el formato exacto, como jpg o png, y Laravel bloquea cualquier archivo que no coincida.
Todas estas reglas están documentadas en la sección de Validación de Laravel. Ahí encuentras la lista completa de validaciones disponibles, incluyendo la regla required para exigir un campo.
Cómo controlo el peso del archivo con las reglas de validación
La documentación también permite limitar el tamaño de los archivos. La regla max define un valor máximo, y cuando trabajas con archivos la regla size funciona de forma específica para controlar su peso.
Este punto queda como reto para ti: revisa la aplicación de max y size en la documentación oficial e intégralas a tu validación para que ningún archivo demasiado pesado pase el filtro.
Cómo actualizo una receta sin obligar a subir imagen
En el método de actualización el enfoque cambia un poco. Copiamos el mismo código de subida, pero lo colocamos dentro de una condición con un if.
La lógica pregunta mediante Request y el método file si el campo imagen existe. Si el usuario envió una imagen, se sube y se actualiza el registro usando la consulta que ya se hizo sobre la receta. Si no envió imagen, la actualización continúa sin problema.
Esto significa que al actualizar no estás obligado a subir una imagen nueva, lo que da flexibilidad para editar otros campos sin tocar el archivo.
Para probar la actualización en Postman, estos son los puntos clave:
- Mantente en el método post y usa el mismo acceso autenticado.
- Agrega el ID del registro que quieres actualizar, por ejemplo el 107.
- Añade el campo adicional guion bajo method con el valor put para indicarle a Laravel que es una actualización.
Si cambias el título y envías la solicitud, el resultado confirma que el título fue actualizado. Con esto completas el flujo de subir, validar y actualizar imágenes dentro de tu proceso administrativo.
¿Ya intentaste agregar la regla de peso máximo a tu validación? Cuéntame en los comentarios cómo te fue con el reto de max y size.