A la hora subir imágenes al servidor necesitamos ver una vista previa de la imagen que se selecciona.
Ejemplo:
Pasa 01:
Para dar estilos vamos utilizar Bootstrap.
Paso 02:
Luego creamos la estructura de Html5.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html>
Paso 03:
Enlazamos el cnd de Bootstrap dentro de la etiqueta head, para este ejemplo simplemente necesitamos los estilos.
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Subir Img</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> </head>
Paso 04:
Dentro del body vamos crear nuestro contenido agregando los estilos de bootstrap.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Subir Img</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row"> <div class="col-lg-5 m-auto"> <div class="card"> <div class="card-body"> <form action="" method="post" enctype="multipart/form-data" id="img" class="text-center"> <h5 class="card-title">Selecciona una imagen</h5> <label for="imagen" id="subir"><i class="fas fa-image fa-lg"></i></label> <input type="file" class="d-none" id="imagen" name="imagen"> <div class="d-none" id="vista_previa"> <img width="100%" id="previa" class="img-thumbnail"> <button id="publicar" type="button" class="btn btn-dark">Publicar</button> </div> </form> </div> </div> </div> </div> </div> </body> </html>
También he agregado iconos de Font Awesome.
Paso 05:
Luego crearemos nuestro propio script antes de cierre del body.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Subir Img</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="row"> <div class="col-lg-5 m-auto"> <div class="card"> <div class="card-body"> <form action="" method="post" enctype="multipart/form-data" id="img" class="text-center"> <h5 class="card-title">Selecciona una imagen</h5> <label for="imagen" id="subir"><i class="fas fa-image fa-lg"></i></label> <input type="file" class="d-none" id="imagen" name="imagen"> <div class="d-none" id="vista_previa"> <img width="100%" id="previa" class="img-thumbnail"> <button id="publicar" type="button" class="btn btn-dark">Publicar</button> </div> </form> </div> </div> </div> </div> </div> <!-- Script para crear la vista previa --> <script> // Seleccionamos el id de nuestro input file const imagen = document.getElementById("imagen"); // Ponemos a la escucha del evento change imagen.addEventListener("change", (e) => { const name = e.target.files[0]; //Creamos una url temporal de nuestro imagen a traves del file let img = URL.createObjectURL(name); //Le agregamos la url temporal en el atributo src de la etiqueta img document.getElementById("previa").src = img; //Le quitamos la clase d-none de bootstrap para hacer visible document.getElementById("vista_previa").classList.remove("d-none"); }); </script> <!-- Hace referencia a los icono de font Awesome puedes utilizar el cdn o descargar--> <script src="js/all.min.js"></script> </body> </html>