Plupload

https://github.com/moxiecode/plupload/issues/842 author(s): Davit Barbakadze

HTML

<script src="https://rawgithub.com/moxiecode/plupload/1.x/js/plupload.full.js"></script>
<div id="container">
    <div id="filelist">No runtime found.</div>
    <br />
    <a id="pickfiles" href="javascript:;">[Select files]</a> 
    <a id="uploadfiles" href="javascript:;">[Upload files]</a>
</div>

JavaScript

$(document).ready(function() {
	function $(id) {
		return document.getElementById(id);	
	}
	 
	var uploader = new plupload.Uploader({
		runtimes : 'html5,flash,silverlight,browserplus',
		browse_button : 'pickfiles',
		container: 'container',
		max_file_size : '10mb',
		url : 'upload.php',
		resize : {width : 320, height : 240, quality : 90},
		flash_swf_url : 'http://rawgithub.com/moxiecode/plupload/1.x/js/plupload.flash.cors.swf',
		silverlight_xap_url : '../js/plupload.silverlight.xap',
		filters : [
			{title : "Image files", extensions : "jpg,gif,png"},
			{title : "Zip files", extensions : "zip"}
		]
	});
	 
	uploader.bind('Init', function(up, params) {
		$('filelist').innerHTML = "<div>Current runtime: " + params.runtime + "</div>";
	});
	 
	uploader.init();
	 
	uploader.bind('FilesAdded', function(up, files) {
		plupload.each(files, function(file) {
			$('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
		});
	});
	 
	uploader.bind('UploadProgress', function(up, file) {
		$(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
	});
	 
	$('uploadfiles').onclick = function() {
		uploader.start();
		return false;
	};
});