It is very easy to preview an image or thumbnail on client side before uploading on the server in jQuery and HTML 5 FileReader() . Suppose you have an application where user uploads bulk photo and then the users want to upload only some selected photo,  in this case, we as a developer don’t want to upload all images photos on the server. As this effect on server load cost effect etc.

So using HTML 5 FileReader() we can able to preview the image before upload it in jQuery.

By this user can view thumbnail  photos on the client side, i.e ( before uploading to server side ), and select or choose the photo which he/she wants to get upload.

Below I have address detailed code how to preview image before upload using jQuery and live example.

Preview an image before it is uploaded

What is FileReader?

The FileReader object lets web applications asynchronously read the contents of files ( or raw data buffers ) stored on the user’s computer, using File or Blob objects to specify the file or data to read, which means that your program will not stall while a file is being read. This is particularly useful when dealing with large files.

File objects may be obtained from a FileList object returned as a result of a user selecting files using the <input> element, from a drag and drop operation’s DataTransfer object, or from the mozGetAsFile() API on an HTMLCanvasElement.

The following code shows how to create a new instance of FileReader.


 var myReader = new FileReader();
 

FileReader includes 4 options for reading a file:

  1. FileReader.readAsBinaryString(Blob|File) :
    The result property will contain the file/blob’s data as a binary string. Every byte is represented by an integer in the range [0..255].
  2. FileReader.readAsText(Blob|File, opt_encoding) :  
    The result property will contain the file/blob’s data as a text string. By default, the string is decoded as ‘UTF-8’. Use the optional encoding parameter can specify a different format.
  3. FileReader.readAsDataURL(Blob|File) :  
    The result property will contain the file/blob’s data encoded as a data URL.
  4. FileReader.readAsArrayBuffer(Blob|File) : 
    The result property will contain the file/blob’s data as an ArrayBuffer object.

Once one of these read methods is called on your FileReader object, the onloadstart,onprogress, onloadonabortonerror, and onloadend can be used to track its progress.

While for the browsers that support HTML5 i.e. Internet Explorer 10 and 11+, Mozilla FireFox, Google Chrome and Opera, and so the image preview is displayed using HTML5 FileReader API

HTML MARKUP:

Here we have added an input file tag and a div tag. This div tag is used as holder where we show our thumbnail image .i.e preview image before uploading it on the server with jQuery example given below.

 <div id="wrapper">
  <input id="fileUpload" type="file" />
  <div id="image-holder"></div>

 jQuery Code: To set preview / thumb  image  using FileReader():

Here first we  bind a change  event to our input file tag, then will check whether the browser supports HTML5 FileReader method, if not then will show alert  message .i. Your browser is not supported.

 

 // For Preview single image
$("#fileUpload").on('change', function () {
if (typeof (FileReader) != "undefined") {
var image_holder = $("#image-holder");
image_holder.empty();
var reader = new FileReader();
reader.onload = function (e) {
$("<img alt="" />", {
"src": e.target.result,
"class": "thumb-image"
}).appendTo(image_holder);
}
image_holder.show();
reader.readAsDataURL($(this)[0].files[0]);
} else {
alert("This browser does not support FileReader.");
}
});

 

Output: Using html 5 FileReader() we preview an image before upload.

BONUS – Multiple Image Preview before uploading in JQuery:

We have  done with preview image before upload, so let go one step further. Now we are going to show you how to select multiple images and preview it before upload .i.e before the image is actually uploaded to the server using jQuery.

For uploading multiple images, we need to add multiple attribute to our input file tag.

HTML Markup:

<div id="wrapper">
 <input id="fileUpload" type="file" multiple />
 <br />
 <div id="image-holder"></div>
 </div>

 jQuery:

Now we store the file length in a variable and make a For loop over it, to get access all the images. Finally, our code for multiple image preview before upload looks like as shown below.

$("#fileUpload").on('change', function () {
 //Get count of selected files
 var countFiles = $(this)[0].files.length;
 var imgPath = $(this)[0].value;
 var extn = imgPath.substring(imgPath.lastIndexOf('.') + 1).toLowerCase();
 var image_holder = $("#image-holder");
 image_holder.empty();
 if (extn == "gif" || extn == "png" || extn == "jpg" || extn == "jpeg") {
 if (typeof (FileReader) != "undefined") {
 //loop for each file selected for uploaded.
 for (var i = 0; i < countFiles; i++) {
 var reader = new FileReader();
 reader.onload = function (e) {
 $("<img alt="" />", {
 "src": e.target.result,
 "class": "thumb-image"
 }).appendTo(image_holder);
 }
 image_holder.show();
 reader.readAsDataURL($(this)[0].files[i]);
 }
 } else {
 alert("This browser does not support FileReader.");
 }
 } else {
 alert("Pls select only images");
 }
 });

view demo

That’s it!

I hope you enjoyed this article and the techniques I used. Please share your comments and questions below!

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.!

We respect your privacy. Your information will not be shared with any third party and you can unsubscribe at any time.
You can support this website by sharing. Thank you!