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); }