Servlet. Ajax implementation upload file progress bar __ajax

Source: Internet
Author: User

Here about the servlet how to upload the file without saying, how will get the percentage of file data already uploaded ...


First we write a class this class to implement Progresslistener this interface, implement the inside of the update (...) Method. The code is as follows

Package com.test.servlet;

Import Java.text.DecimalFormat;

Import Javax.servlet.http.HttpServletRequest;

Import Org.apache.commons.fileupload.ProgressListener;

public class Uploadprogresslistener implements Progresslistener
{
	
	private httpservletrequest request = null; C6/>private DecimalFormat DecimalFormat = new DecimalFormat ("#00.0");
	
	
	
	Public Uploadprogresslistener (HttpServletRequest request)
	{
		this.request = Request;
	}
	
	public void update (long pbytesread, long pcontentlength, int pitems)
	{
		
		 double percent= (double) pbytesread*100 /(double) pcontentlength; 
		 
		 String haddownloadpercent = Decimalformat.format (percent). toString ();
	
		Request.getsession (). setattribute ("Haddownloadpercent", haddownloadpercent);
		
	}



After this class is written, we write a servlet that is used by Ajax to continuously request data over a short period of time, such as the 100ms request interval.


On the Code


Package com.test.servlet;

Import java.io.IOException;
Import Java.io.PrintWriter;

Import javax.servlet.ServletException;
Import Javax.servlet.http.HttpServlet;
Import Javax.servlet.http.HttpServletRequest;
Import Javax.servlet.http.HttpServletResponse;
Import javax.servlet.http.HttpSession;

public class Readprogressinsessionservlet extends HttpServlet
{public
void doget (HttpServletRequest request, HttpServletResponse response)
			throws Servletexception, IOException
	{
HttpSession session = Request.getsession ();
		
		String haddownloadpercent = (string) session.getattribute ("Haddownloadpercent");
		
		Response.setcharacterencoding ("Utf-8");
		
		PrintWriter printwriter = Response.getwriter ();
		
		Printwriter.write (haddownloadpercent);
		
		Printwriter.flush ();
	}

public void DoPost (HttpServletRequest request, httpservletresponse response)
			throws Servletexception, IOException
	{

	this.doget (request,response);
		
	}

}


And one is the core class that uploads the file.


Servletfileupload servletfileupload = new Servletfileupload (
				diskfileitemfactory);

		Servletfileupload.setprogresslistener (New Uploadprogresslistener (req));

Where req is the HttpServletRequest object Uploadprogresslistener is the implementation class of Progresslistener interface ...



The last is the frequent launch of HTTP requests via JavaScript, which is Ajax ... However, this approach can have an impact on server performance ...


	
		function f () {var demonstratehaduploadfilesizearea = document.getElementById ("Demonstratehaduploadfilesizearea")
			
			;
			var Idiv=document.getelementbyid (' Haduploadpercent ');
			
			var Ibox=document.getelementbyid (' Demonstratearea ');
			
			
			
			var url = "Readprogressinsessionservlet";
			
			alert (URL);
			
			var xmlhttprequest = null; if (window. 
				
			ActiveXObject) {XMLHttpRequest = new ActiveXObject ("Microsoft.XMLHTTP"); else if (window.
			XMLHttpRequest) {XMLHttpRequest = new XMLHttpRequest ();
				
				} if (null!= xmlhttprequest) {xmlhttprequest.open ("get", url.tostring (), true);

				Xmlhttprequest.onreadystatechange = Ajaxcallback;
			Xmlhttprequest.send (NULL);
					function Ajaxcallback () {if (xmlhttprequest.readystate = 4) {if (Xmlhttprequest.status = 200)
						
						{var responsetext = Xmlhttprequest.responsetext; Demonstratehaduploadfilesizearea.innerhtml= ResponseText;
						
						var iwidth = responsetext;
						
						idiv.style.width=idiv.offsetwidth+1+ ' px ';
						
					Idiv.innerhtml= Math.Round (iwidth) + "%";
			
		}}} function g () {SetInterval ("F ()", 5); }



Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.