File "00index.html"

Full Path: /home/analogde/www/FormData/00index.html
File size: 5.07 KB
MIME-type: text/html
Charset: utf-8

<html>
<head>
	<title>AJAXUploader :: FormData method</title>
	<link rel="stylesheet" type="text/css" href="css/style.css"/>
	
	<!--Using the TimeStructure.js and SizeStructure.js to convert number of seconds and bytes to well structured format-->
	<script src="js/TimeStructure.js"></script>
	<script src="js/SizeStructure.js"></script>
	<script>
		var xhr, hUploadSpeed;
		function sendFile()
		{
			document.getElementById("serverresponse").innerHTML = "";//clear previous server response
			
			var url = "upload.php";
			var formData = new FormData(document.getElementById("form1"));
			xhr = new XMLHttpRequest();
			
			xhr.upload.addEventListener('progress', uploadProgress, false);//EventListener for upload progress
			xhr.addEventListener('abort', uploadAbort, false);//EventListener for abort
			xhr.addEventListener('error', uploadError, false);//EventListener for error
			xhr.addEventListener('load', uploadThrough, false);//EventListener for completed upload
			
			xhr.open("POST", url, true);
			//xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //no longer necessary here
			xhr.onreadystatechange = function()
			{
				if(xhr.readyState == 4 && xhr.status == 200)
				{
					document.getElementById("serverresponse").innerHTML = xhr.responseText;
				}
			}
			
			xhr.send(formData); //Send to server
			hUploadSpeed = setInterval(UploadSpeed, 1000); //per seconds
		}
		
		/*From here down is same for all the methods, notifications, and other eventListeners*/
		var i = new TimeStructure();//creating a TimeStructure object
		var j = new SizeStructure();//creating a SizeStructure object
		
		function abort()
		{
			clearInterval(hUploadSpeed);
			xhr.abort();
		}

		var uploaded = 0, prevUpload = 0, speed = 0, total = 0, remainingBytes = 0, timeRemaining = 0;
		function uploadProgress(e)
		{
			if (e.lengthComputable) 
			{
				uploaded = e.loaded;
				total = e.total;
				//percentage
				var percentage = Math.round((e.loaded / e.total) * 100);
				document.getElementById('progress_percentage').innerHTML = percentage + '%';
				document.getElementById('progress').style.width = percentage + '%';
				
				document.getElementById("remainingbyte").innerHTML =  j.BytesToStructuredString(e.total - e.loaded);//remaining bytes
				document.getElementById('uploadedbyte').innerHTML = j.BytesToStructuredString(e.loaded);//uploaded bytes
				document.getElementById('totalbyte').innerHTML = j.BytesToStructuredString(e.total);//total bytes
			}
		}
		
		function uploadAbort()
		{
			document.getElementById('progress_percentage').innerHTML = '0%';
			document.getElementById('progress').style.width = '0px';
			document.getElementById("serverresponse").innerHTML = "Upload canceled";
			xhr = null;
		}
		
		function uploadError()
		{
			document.getElementById('progress_percentage').innerHTML = '0%';
			document.getElementById('progress').style.width = '0px';
			document.getElementById("serverresponse").innerHTML = "An error occured.";
			clearInterval(hUploadSpeed);
			xhr = null;
		}
		
		function uploadThrough()
		{
			document.getElementById('progress_percentage').innerHTML = 'Upload completed!';
			UploadSpeed();//flush
			clearInterval(hUploadSpeed);
			xhr = null;
		}
		
		function UploadSpeed()
		{
			//speed
			speed = uploaded - prevUpload;
			prevUpload = uploaded;
			document.getElementById("speed").innerHTML = j.SpeedToStructuredString(speed);
			//Calculating ETR
			remainingBytes = total - uploaded;
			timeRemaining = remainingBytes / speed;
			document.getElementById("ETR").innerHTML = i.SecondsToStructuredString(timeRemaining);
		}
	</script>
</head>
<body>
	<header>
		<h1>the FormData method</h1>
		This shows how to upload file through AJAX using the the FormData method.
	</header>
	<div class="container">
		<form id="form1" name="form1" enctype="multipart/form-data">
			<table width="100%">
				<tr><td style="width:100px;">File 1:</td><td><input type="file" id="file1" name="file1"></td></tr>
				<tr><td>File 2:</td><td><input type="file" id="file2" name="file2"></td></tr>
				<tr><td>Your name:</td><td><input type="text" id="uname" name="uname" placeholder="Your name"></td></tr>
				<tr><td></td><td><input type="button" value="Send" onclick="sendFile();" /> <input type="button" value="Abort" onclick="abort();" /></td></tr>
			</table>
		</form>
		
		<div id="progress" style="margin: 10px 5px;"></div><br><br>
		
		<table border=1 width="100%">
			<tr><td style="width:250px;">Percentage Completed:</td><td><span id="progress_percentage">0%</span></td></tr>
			<tr><td>Speed:</td><td><span id="speed">0 b/s</span></td></tr>
			<tr><td>Estimated Time Remaining:</td><td><span id="ETR">0 seconds</span></td></tr>
			<tr><td>Remaining:</td><td><span id="remainingbyte">0 bytes</span></td></tr>
			<tr><td>Sent:</td><td><span id="uploadedbyte">0 bytes</span></td></tr>
			<tr><td>Total:</td><td><span id="totalbyte">0 bytes</span></td></tr>
			<tr><td>Server response:</td><td><span id="serverresponse"></span></td></tr>
		</table>
	</div>
</body>
</html>