Inicio » Blog »

21 octubre, 2024

Cómo subir imágenes en Laravel

Para subir fotos imágenes en Laravel usamos el formulario en POST y el atributo enctype="multipart/form-data" para enviar archivos, de varias formas

Cómo subir imágenes en Laravel

Suscríbete a nuestro canal en Youtube

Suscríbirse

Subir imágenes usando Laravel es mucho más sencillo porque dispone de unos métodos que nos facilitan tal proceso de mover la imagen al servidor web e incluso renombrando la imagen. 

Indice

  1. ¿Qué tipo de imágenes podemos subir?
  2. Las rutas para subir las imágenes
  3. Vista de Formularios que podemos usar
  4. Métodos para subir imágenes 
  5. Renombrar las imágenes 
  6. Cambiar el formato de imagen (.jpg, .png, .gif, etc)

 

¿Qué tipo de imágenes podemos subir?

  • Generalmente podemos subir imágenes con extensión png, jpg, gif entre los de mayor popularidad.
  • Ten en cuenta que solo puede subir las imagénes mediante los métodos store (POST) y update (PUT) de un CRUD en Laravel.
  • Cabe indicar que este tutorial para subir una foto, solo hará dicha actividad, no realizará ningun tratamiento  a la imagen como reducir el tamaño, el peso, redimensionarla o cambiar de formato. Por tanto la imagen o foto debe estar correctamente tratada:
  1. La imagen debe tener el tamaño adecuado en altura y ancho
  2. La imagen debe tener el peso adecuado en relación con su tamaño.
  3. La imagen debe estar entre los formatos JPG, JPEG, PNG, GIF de las más usados en una aplicación web.

 

Rutas para subir imagenes en Laravel

En el archivo routes/web.php vamos a incluir dos rutas:

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CodeaController;

// Mostrar el formulario
Route::get('/codea', [CodeaController::class, 'index']);
// Guardar imagen
Route::post('/codeaguardar', [CodeaController::class, 'codeaguardar']);

 

Ruta GET que permitirá llamar a la vista del formulario  la imagen

//llama a form
Route::get('codea',[CodeaController::class , 'index' ] );

 

Ruta POST que permitirá subir o mover el archivo a una p

// guardar
Route::post('codeaguardar',[CodeaController::class , 'codeaguardar' ] );

 

Vistas del formulario para subir una Imagen 

La implementación de formulario puede ser HTML o BLADE. En cualquiera de los dos casos fijemos que los formulario deben estar configurados con el atributo action en POST además de enctype  en multipart para permitir subir archivo de tamaño más grande.

En ocaciones debemos configurar los permisos en el servidor web para subir archivos: como el tiempo, el tipo de archivo, el tamaño, etc

Veamos las vistas

 

(1) Formulario usando HTML 

Las vistas generadas a partir del método create donde vemos que el formulario invoca al método store POST

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>UPLOAD IMAGENES EN LARAVEL</title>
</head>
<body>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <form action="codeaguardar" enctype="multipart/form-data" method="POST">
                    @csrf    
                    <input type="text" name="nombre" placeholder="ingrese nombre:">
                    <input type="file" name="imagen">
                    <button type="submit">GUARDAR</button>
                 </form> 
            </div>
        </div>
    </div>
</body>
</html>

 

(2) Formulario usando LaravelCollective/HTML

Para usar este formato antes debe contar con el paquete de LaravelCollective. Siga el link si desea instalar LaravelCollective en su proyecto web.

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            {!! Form::open(['method'=>'POST','route'=>['codeaguardar'],'files'=>'true']) !!}
            {!! Form::text('nombre',null,['placeholder'=>'Ingrese nombre']) !!}    
            {!! Form::file('imagen',null) !!}
            {!! Form::submit("GUARDAR") !!}
            {!! Form::close() !!}
        </div>
    </div>
</div>
@endsection

 

Proceso para subir imágenes en Laravel (Upload)

Obviamente estos script se deben implementar dentro del método store del controlador y las imágenes se almacenarán en una carpeta post dentro de otro llamada img en el directorio public (public/img/post).

 

Controller con los métodos para subir imágenes (CodeaController.php)

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Post; 

class CodeaController extends Controller
{
    public function index(){        
        return view('welcome');
    }

    public function codeaguardar(Request $request){
        
        $post = new Post();
        $post->nombre = $request->nombre;

        // Tratamiento de la imagen
        if($request->hasFile("imagen")){

            $imagen = $request->file("imagen");                        
            $nombreimagen = $imagen->getClientOriginalName();
            $ruta = public_path("img/post/");            
            copy($imagen->getRealPath(),$ruta.$nombreimagen);
            $post->imagen = $nombreimagen;
            
        }

        $post->save();
        
    }
}

 

Desglosando CodeaController

Cómo observados tenremos dos métodosEl método codeaguardar para crear un nuevo registro en la base de datos y guardar  la imagen

Ahora veamos los (tres) scripts PHP que nos pueden ayudar a subir una foto al servidor web a la carpeta public/img/post

(*) Tambien podemos renombrar la imagen, pero debemos tener en cuenta la extensión 

  • SUBIR IMÁGENES CON MOVE

public function codeaguardar(Request $request){
        
        $post = new Post();
        $post->nombre = $request->nombre;

        // Tratamiento de la imagen
        if($request->hasFile("imagen")){

            $imagen         = $request->file('imagen');            
            $nombreimagen   = $imagen->getClientOriginalName();
            $ruta           = public_path("img/post/");
            $imagen->move($ruta,$nombreimagen);         
            $post->foto     = $nombreimagen;

        }

        $post->save();
        
    }
  • SUBIR IMÁGENES CON COPY
public function codeaguardar(Request $request){
        
        $post = new Post();
        $post->nombre = $request->nombre;

        // Tratamiento de la imagen
        if($request->hasFile("imagen")){

            $imagen         =   $request->file('imagen');
            $nombreimagen   =   $imagen->getClientOriginalName();
            $ruta           =   public_path('/img/post/'.$nombreimagen);
            copy($imagen->getRealPath(),$nuevaruta);
            $post->foto     =   $nombreimagen;

        }

        $post->save();
        
    }
  • SUBIR IMÁGENES CON EL PAQUETE IMAGE INTERVENTION

Para hacer upload de imágenes con el paquete Image Intervention antes debemos realizar el proceso de instalación de dicho paquete. Para poderlo instanciar en el controlador pertinente.

He aqui un tutorial de ¿cómo instalar Image Intervention con Laravel?

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Post; 
use Intervention\Image\ImageManagerStatic as Image;


class CodeaController extends Controller
{
    public function index(){
        return view('welcome');
    }

    public function codeaguardar(Request $request){
        
        $post = new Post();
        $post->nombre = $request->nombre;

        // Tratamiento de la imagen
        if($request->hasFile("imagen")){

            $imagen         = $request->file("imagen");            
            $nombreimagen   = $imagen->getClientOriginalName();
            $ruta           = public_path("img/post/");
            Image::make($imagen->getRealPath())->save($ruta);
            $post->foto     = $nombreimagen;

        }

        $post->save();
        
    }
}

Renombrar imágenes en Laravel

Simplemente reemplazamos la linea 

$nombreimagen   = $imagen->getClientOriginalName();

por esta línea, donde tomamos el valor del input nombre transformandolo a formato slug, adicionalmente le agregamos un numero único. finalmente le asignamos la extensión que tiene la imagen.

$nombreimagen   =   Str::slug($request->nombre).time().'.'.$imagen->getClientOriginalExtension();

 

Cambiar el formato o extensión de una imagen en Laravel

Aqui debemos usar Image Interventión para cambiar el formato o extensión de la imagen, el método puede variar un poco, tengamos en cuenta que estamos cambiando el formato de imagen y el nombre a una que estamos subiendo. Veamos

public function codeaguardar(Request $request){
        
        $post = new Post();
        $post->nombre = $request->nombre;

        // Tratamiento de la imagen
        if($request->hasFile("imagen")){

            $imagen         = $request->file("imagen");            
            $_nombre        = Str::slug($request->nombre);
            $_extension     = ".webp"; // o cualquier formato como jpg, jpeg, png, gif
            $nuevoNombreImagen   =   $_nombre.'.'.$_extension;
            $ruta           = public_path("img/post/".$nombreimagen);
            Image::make($imagen->getRealPath())->save($ruta)->encode('.webp', 92);
            $post->foto     = $nuevoNombreImagen;

        }

        $post->save();
        
    }

También podemos usar directamente la clase de la librería Imagick de PHP... esto queda pendiente.

 

La presente implementación solo permite mover el archivo o imagen hacia el servidor, mas no realiza procesamiento alguno para modificar el tamaño, la altura o  ancho, ni tampoco el peso de la imagen. Si queremos modificar estos parámetros talvez no nos ayude este post. En un próximo post emplearemos la dependencia Image Intervention mucho más a fondo .

Asi de sencillo, podemos elevar o hacer upload de imágenes en el framework Laravel.


Leido 46269 veces | 5 usuarios

Descarga del código fuente Laravel de Cómo subir imágenes en Laravel

Accede al código fuente esencial de nuestra aplicación en formato ZIP ó TXT. Ideal para desarrolladores que desean personalizar o integrar nuestra solución.

Opciones de descarga

  • Usuarios Registrados: Inicia sesión para descarga inmediata.
  • Nuevos Usuarios: Regístrate y descarga.

4 descargas

Para descargar el código inicia sesión o crea una cuenta

Iniciar Sesión

Compartir link del tutorial con tus amigos

Preguntas

...

1. ¿Qué atributo es necesario agregar al formulario para permitir la subida de archivos en Laravel?

2. ¿Qué Facade se utiliza comúnmente para almacenar imágenes en Laravel?

3. ¿Cuál es el método recomendado para almacenar una imagen en el disco 'public' usando el Facade Storage?

4. ¿Qué función se usa para obtener el archivo enviado desde el formulario en Laravel?

5. ¿Dónde se almacenan las imágenes cuando usas el disco 'public' en Laravel?

6. ¿Qué comando debes ejecutar para crear un enlace simbólico entre storage/app/public y public/storage?

7. ¿Qué validación puedes usar en el controlador para asegurarte de que el archivo sea una imagen?

8. ¿Qué método del objeto UploadedFile permite mover un archivo a una ubicación específica?

9. ¿Qué configuración en el archivo filesystems.php define la ubicación predeterminada para almacenar archivos?

10. ¿Cómo puedes mostrar una imagen almacenada en el disco 'public' en una vista Blade?


Laravel Página Web Administrable

USD 37.00

Descarga del código fuente

Laravel Página Web Administrable
ReactJS y Laravel Directorio de Empresas

USD 27.00

Descarga del código fuente

ReactJS y Laravel Directorio de Empresas
Curso de Laravel básico

USD 0.00

Descarga del código fuente

Curso de Laravel básico

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú