Aqui eu fiz com jQuery usando a API FileReader.
Marcação de HTML:
<input id="fileUpload" type="file" multiple />
<div id="image-holder"></div>
jQuery:
Aqui no código jQuery, primeiro eu verifico a extensão do arquivo. ou seja, arquivo de imagem válido a ser processado, então irá verificar se o suporte do navegador API FileReader é sim, então apenas processado, caso contrário, exibirá a mensagem respeitada
$("#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 />", {
"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");
}
});
Artigo detalhado: Como visualizar a imagem antes de carregá-la, jQuery, HTML5 FileReader () com demonstração ao vivo