Solution 1 :

Using readAsDataURL you can get file path and set to img tag.

jQuery(document).ready(function() {



    var readURL = function(input) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();

            reader.onload = function(e) {
                $('.input-img').attr('src', e.target.result);

            }

            reader.readAsDataURL(input.files[0]);
        }
    }


    $("input[type='file']").on('change', function() {
        readURL(this);
    });


});
.custom-input-file {
    position: relative;
  cursor:pointer;
}

.custom-input-file .input-file-wrapper {
    height: 150px;
    width: 150px;
    border-radius: 10px;
    position: relative;
}

.custom-input-file .input-file-wrapper .input-img {
    height: 100%;
    -o-object-fit: cover;
    object-fit: cover;
    border: 1px solid #ced4da;
    border-radius: 10px;
  width: 100%;;
}


.custom-input-file .input-file-wrapper input[type=file] {
    position: absolute;
    left: 0;
    width: 100%;
    height: 100%;
    padding: 0;
    opacity: 0;
    top: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<div class="input-wrapper">                           
      <div class="custom-input-file ">
           <div class="input-file-wrapper ">
               <img src="https://storage.googleapis.com/proudcity/mebanenc/uploads/2021/03/placeholder-image.png " class="input-img">
               <input type="file" class="form-control ">
           </div>
      </div>
</div>

Solution 2 :

U can use readAsDataURL and get Base64 image and put it into <img> source

const state = {
    fileMaxSize: 5,
}
const myImg = document.getElementById('img');
const input = document.getElementById('icon');
const wrap = document.getElementById('wrap');
const getBase64 = (img, callback) => {
    const reader = new FileReader();
    reader.addEventListener('load', () =>   callback(reader.result));
    reader.readAsDataURL(img);
}

input.onchange = () => {
  const file = [...input.files][0];
  
  if (!file) {
    return
  }
    const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
    const isLt2M = file.size / 1024 / 1024 < state.fileMaxSize;

    if (!isJpgOrPng || !isLt2M) {
        if (!isJpgOrPng) {
            alert('You can only upload JPG/PNG file!')
        }
        if (!isLt2M) {
            alert(`Image must smaller than ${state.fileMaxSize}MB!`)
        }
        return false
    }

    getBase64(file, imageUrl => {
    let Base64Img = imageUrl
            console.log('File Object ->', file)
            console.log('Base64 Image ->', Base64Img)
            myImg.src = Base64Img
            myImg.style.display = 'block'
             wrap.style.display = 'none'
        }
    );
}
.hidden {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
}

.image-label {
    cursor: pointer;
    width: 100px;
    height: 100px;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    box-sizing: border-box;
    background-color: #fafafa;
    overflow: hidden;
    border:1px dashed #d9d9d9;
}

.image-label img {
  display: none;
  width: 100%;
  height: auto;
}
<input class="hidden" type="file" id="icon"/>
<label class="image-label" for="icon">
    <img src="" id="img" />
    <div class="wrap" id="wrap">
        <div>Select</div>
    </div>
</label>

Solution 3 :

little bit change and add some javascrpt and jquery in it.

firslty add this

 <div class="form">
               
                <div class="grid">
                    <div class="form-element">
                        <input type="file" id="file-1" asp-for="imge1" name="imge1">
                        <label for="file-1" id="file-1-preview">
                           
                            <div>
                                <span>+</span>
                            </div>
                        </label>
                    </div>
                 </div>
               </div>

then add this javascript and jquery

<script>
        function previewBeforeUpload(id){
  document.querySelector("#"+id).addEventListener("change",function(e){
    if(e.target.files.length == 0){
      return;
    }
    let file = e.target.files[0];
    let url = URL.createObjectURL(file);
    document.querySelector("#"+id+"-preview div").innerText = file.name;
    document.querySelector("#"+id+"-preview img").src = url;
  });
}

previewBeforeUpload("file-1");
previewBeforeUpload("file-2");
previewBeforeUpload("file-3");
previewBeforeUpload("file-4");
previewBeforeUpload("file-5");
previewBeforeUpload("file-6");
previewBeforeUpload("file-7");
previewBeforeUpload("file-8");
previewBeforeUpload("file-9");
previewBeforeUpload("file-10");


    </script>

Also add this CSS

* {
            margin: 0px;
            padding: 0px;
            box-sizing: border-box;
        }

        body {
            font-family: "Raleway",sans-serif;
            background: #f8f8f8;
        }

        .form {
            margin: 20px 0px 20px;
            padding: 0px 10px;
        }

            .form h2 {
                text-align: center;
                color: #acacac;
                font-size: 12px;
                font-weight: 100;
            }

            .form .grid {
                margin-top: 5px;
                display: flex;
                justify-content: space-around;
                flex-wrap: wrap;
                gap: 20px;
            }

                .form .grid .form-element {
                    width: 80px;
                    height: 80px;
                    box-shadow: 0px 0px 20px 5px rgba(100,100,100,0.1);
                }

                    .form .grid .form-element input {
                        display: none;
                    }

                    .form .grid .form-element img {
                        width: 80px;
                        height: 80px;
                        object-fit: cover;
                    }

                    .form .grid .form-element div {
                        position: relative;
                        height: 30px;
                        margin-top: -40px;
                        background: rgba(0,0,0,0.5);
                        text-align: center;
                        line-height: 40px;
                        font-size: 13px;
                        color: #f5f5f5;
                        font-weight: 600;
                    }

                        .form .grid .form-element div span {
                            font-size: 15px;
                        }

Problem :

i create a form where i upload image into database where i create icon input to select the image i want to convert that icon into that picture which i select after slecting the picture.

<label class="custom-file-upload">
                <input asp-for="imge1" name="imge1" type="file" />
                <i class="fa fa-camera"></i>

CSS

input[type="file"] {
    display: none;
}

.custom-file-upload {
    border: 1px solid #ccc;
    display: inline-block;
    padding: 6px 12px;
    cursor: pointer;
    height: 80px;
    width: 100px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 30px;
    color: var(--primary-color);
}

Comments

Comment posted by Creative Things

i add this code it can not respond just an icon of image but not clickable

Comment posted by Creative Things

Also why you cannot wrap the jquery in script tag

By