77

Does any one know how to do a simple image upload and display it on the page.

This is what I'm looking for.

  • User(me) will choose a image
  • The page will display the image without refreshing the page or going to another file.
  • multiple <img src> will do because I need to display different image size.

This was my code. (Some of it are edited I got it from here )

<style>
    /* Image Designing Propoerties */
    .thumb {
        height: 75px;
        border: 1px solid #000;
        margin: 10px 5px 0 0;
    }
</style>

<script type="text/javascript">
    /* The uploader form */
    $(function () {
        $(":file").change(function () {
            if (this.files && this.files[0]) {
                var reader = new FileReader();

                reader.onload = imageIsLoaded;
                reader.readAsDataURL(this.files[0]);
            }
        });
    });

    function imageIsLoaded(e) {
        $('#myImg').attr('src', e.target.result);
        $('#yourImage').attr('src', e.target.result);
    };

</script>


<input type='file' />
</br><img id="myImg" src="#" alt="your image" height=200 width=100>
royhowie
  • 10,605
  • 14
  • 45
  • 66
user3335903
  • 1,175
  • 4
  • 12
  • 12
  • Have you tried using a plugin/library for this? For instance, [Dropzone](http://www.dropzonejs.com/). – aroth Feb 28 '14 at 05:35
  • No. I think I don't need it for now. –  Feb 28 '14 at 05:37
  • @aroth . Do you know what seems to be the problem with this code? Why my image isn't appearing? –  Feb 28 '14 at 05:48
  • 3
    The code throws errors as written. After cleaning it up it works just fine for me. See: http://jsfiddle.net/bPUkC/2/. Also note that although this displays the image on the page, it is not actually uploading the image. – aroth Feb 28 '14 at 05:54
  • It looks good to see to work. But when I tried to copy and paste it on my editor, and tried to browse for it. It didn't work for me. :( –  Feb 28 '14 at 06:01
  • I tried ` –  Feb 28 '14 at 06:08
  • @aroth. I some problems on my `src` I just don't know how to fix it. –  Feb 28 '14 at 06:17

4 Answers4

59

Here's a simple example with no jQuery. Use URL.createObjectURL, which

creates a DOMString containing a URL representing the object given in the parameter

Then, you can simply set the src of the image to that url:

window.addEventListener('load', function() {
  document.querySelector('input[type="file"]').addEventListener('change', function() {
      if (this.files && this.files[0]) {
          var img = document.querySelector('img');
          img.onload = () => {
              URL.revokeObjectURL(img.src);  // no longer needed, free memory
          }

          img.src = URL.createObjectURL(this.files[0]); // set src to blob url
      }
  });
});
<input type='file' />
<br><img id="myImg" src="#">
clabe45
  • 1,956
  • 11
  • 24
11

Try this, It supports multi file uploading,

$('#multi_file_upload').change(function(e) {
    var file_id = e.target.id;

    var file_name_arr = new Array();
    var process_path = site_url + 'public/uploads/';

    for (i = 0; i < $("#" + file_id).prop("files").length; i++) {

        var form_data = new FormData();
        var file_data = $("#" + file_id).prop("files")[i];
        form_data.append("file_name", file_data);

        if (check_multifile_logo($("#" + file_id).prop("files")[i]['name'])) {
            $.ajax({
                //url         :   site_url + "inc/upload_image.php?width=96&height=60&show_small=1",
                url: site_url + "inc/upload_contact_info.php",
                cache: false,
                contentType: false,
                processData: false,
                async: false,
                data: form_data,
                type: 'post',
                success: function(data) {
                    // display image
                }
            });
        } else {
            $("#" + html_div).html('');
            alert('We only accept JPG, JPEG, PNG, GIF and BMP files');
        }

    }
});

function check_multifile_logo(file) {
    var extension = file.substr((file.lastIndexOf('.') + 1))
    if (extension === 'jpg' || extension === 'jpeg' || extension === 'gif' || extension === 'png' || extension === 'bmp') {
        return true;
    } else {
        return false;
    }
}

Here #multi_file_upload is the ID of image upload field.

JRS
  • 31
  • 6
HB Kautil
  • 277
  • 1
  • 6
  • 1
    Thank you for this, but I need a Javascript code, not PHP. –  Feb 28 '14 at 05:45
  • I just need to display the image 4x on different sizes, I'm just having problems with my `src` but thank you for this. I'm gonna try this later. :D –  Feb 28 '14 at 06:24
  • You can return image from ajax call. In my example upload_contact_info.php. So you wll get image name in ajax response then you jest need to create dynamic image. That is it. – HB Kautil Feb 28 '14 at 06:27
  • This is ridiculous but, I have no idea on how I can use your posted code. Haha! But I'll just work on it. –  Feb 28 '14 at 06:47
  • @HBKautil, where is the rest of the code? Where is the HTML part? – Black Sep 14 '17 at 11:09
5
<img id="output_image" height=50px width=50px\
<input type="file" accept="image/*" onchange="preview_image(event)">

<script type"text/javascript">
  function preview_image(event) {
    var reader = new FileReader();
    reader.onload = function(){
      var output = document.getElementById('output_image');
      output.src = reader.result;
    }
    reader.readAsDataURL(event.target.files[0]);
  }
</script>
D. Pardal
  • 4,876
  • 1
  • 13
  • 32
  • 8
    Please add an explanation to your answer, why and how this code works. Code only answers are not very useful and can lead to [cargo cult programming](https://en.wikipedia.org/wiki/Cargo_cult_programming). – Max Vollmer Apr 06 '19 at 00:18
0
<li class="list-group-item active"><h5>Feaured Image</h5></li>
            <li class="list-group-item">
                <div class="input-group mb-3">
                    <div class="custom-file ">
                        <input type="file"  class="custom-file-input" name="thumbnail" id="thumbnail">
                        <label class="custom-file-label" for="thumbnail">Choose file</label>
                    </div>
                </div>
                <div class="img-thumbnail  text-center">
                    <img src="@if(isset($product)) {{asset('storage/'.$product->thumbnail)}} @else {{asset('images/no-thumbnail.jpeg')}} @endif" id="imgthumbnail" class="img-fluid" alt="">
                </div>
            </li>
<script>
$(function(){
$('#thumbnail').on('change', function() {
    var file = $(this).get(0).files;
    var reader = new FileReader();
    reader.readAsDataURL(file[0]);
    reader.addEventListener("load", function(e) {
    var image = e.target.result;
$("#imgthumbnail").attr('src', image);
});
});
}
</script>
  • 1
    Please add explanation as to why your answer is more helpful than already existing answers. Also, try to avoid code-only answers in general. – gaganshera May 08 '20 at 06:55