Laravel

Cargar imagen en Laravel 11

Cargar imagen en Laravel 11 se refiere al proceso de permitir a los usuarios cargar imágenes a una aplicación web de Laravel 11, almacenar la imagen en el disco y guardar el nombre de fichero en un registro de base de datos.

Esta función de carga se usa comúnmente en aplicaciones donde los usuarios necesitan cargar imágenes para diversos fines, como imágenes de perfil, imágenes de productos o fotos de galería, logo de aplicación, etc

Hay diversas formas de cargar imágenes a laravel y en este articulo nos enfocaremos en una carga limpia y directa evitando paquetes de terceros.

Veamos los pasos importantes y nativos que debemos de hacer

Paso 1: Configurar e Instalar Laravel 11

Si aún no lo ha hecho, instale Laravel 11 siguiendo la documentación oficial: Guía de instalación de Laravel.

Paso 2: Crear un modelo y migración para la carga de imágenes

Ejecute el siguiente comando para crear un modelo y una migración para la carga de imágenes, esto lo puedes hacer mediante consola de windows o la terminal de tu editor VSCODE:

php artisan make:model Student -m

Ademas, vamos a crear el controlador con la siguiente linea de comando.

php artisan make:controller StudentController

Esto creará un modelo de producto y su archivo de migración correspondiente, ademas de un controlador para gestionar un CRUD de la carga de imagen.

Una vez generado la migracion edite el archivo de migración (database/migrations/YYYY_MM_DD_create_students_table.php) y agregue las columnas necesarias para la imagen:

public function up()
{
    Schema::create('students', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('image')->nullable();
        $table->timestamps();
    });
}

Luego, ejecute la migración para crear la tabla de students:

php artisan migrate

Esto creara una tabla en nuestra base de datos llamado students con sus respectivas columnas que hemos creado en la migración.

Paso 3: Crea formulario para cargar imagen

Crea un formulario en tu vista para permitir que los usuarios carguen una imagen junto con otros campos del estudiante: en este caso Nombre e imagen.

Para que esta vista sea visible tenemos que agregar esto a nuestro controlador

class StudentController extends Controller
{
    public function index()
    {
        return view("student.index");
    }
}

En el script anterior estamos diciendo que muestre la vista estudiante y dentro de esa vista podemos crear el siguiente formulario.

<form action="{{ route('students.store') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <label for="name">Nombre del estudiante:</label>
    <input type="text" name="name" id="name">
    <label for="image">Image:</label>
    <input type="file" name="image" id="image">
    <button type="submit">Enviar</button>
</form>

Paso 4: Almacenar la imagen cargada

En StudentController, almacene la imagen cargada en el directorio público y guarde la ruta de la imagen en la base de datos:

use App\Models\Student;
use Illuminate\Http\Request;
public function store(Request $request)
{
    $request->validate([
        'name' => 'required',
        'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
    ]);
    $imageName = time().'.'.$request->image->extension();
    $request->image->move(public_path('images'), $imageName);
    $product = new Student();
    $product->name = $request->name;
    $product->image = 'images/'.$imageName;
    $product->save();
    return redirect()->route('students.index')->with('success', 'Student created successfully.');
}

Paso 5: Mostrar la imagen cargada

En la vista donde se muestran los detalles del estudiante, puede mostrar la imagen cargada de esta manera:

<img src="{{ asset($student->image) }}" alt="{{ $student->name }}">

Paso 6: Validación y manejo de errores

Asegúrese de manejar los errores de validación y de mostrárselos al usuario si falla el envío del formulario. Esto es importante para el usuario final para que sepa que paso con la imagen que intenta subir al servidor.

Justamente en la función store() de nuestro controlador podemos asignarle validaciones, ejemplo:

$request->validate([
        'name' => 'required',
        'description' => 'required',
        'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
    ]);

En la validación anterior estamos indicando que la carga de imagen posee las siguientes características:

  • La carga es requerido y no puede estar vacía.
  • El tipo de archivo tiene que ser de tipo imagen exclusivamente
  • El tamaño máximo del archivo imagen no debe se sobrepasar los 2048kb (2MB)

De esta manera obligamos al usuario a cumplir estas validaciones.

Paso 7: Funciones adicionales (opcional)

Puede agregar funciones adicionales, como ser:

  • Cambio de tamaño de imágenes
  • Compresión de imágenes
  • Restricciones de tipo de archivo, según sus requisitos.
  • Cambio de nombre de archivo y/o extensión, etc.

Si cumpliste los pasos anteriores ya tiene la funcionalidad de carga de imágenes en su aplicación Laravel 11.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad