Commons Fileupload+Servlet+JQuery实现文件上传进度条

来源:互联网 发布:我的世界清除玩家数据 编辑:程序博客网 时间:2024/06/04 23:18

实现文件动态上传,大致的思路是这样的:

首先,利用Common Fileupload的ProgressListener接口讲实时的文件上传百分比存入session中,

然后,实现一个读取session的servlet,在web端利用ajax间隔一定时间请求这个servlet,

最后,将文件上传百分比显示在web端,并制作进度条。

1.实现ProgressListener

ServletFileUpload upload = new ServletFileUpload(upload_factory);class UploadProgressListener implements ProgressListener{private HttpServletRequest request;private DecimalFormat df = new DecimalFormat("#00.0");UploadProgressListener(HttpServletRequest request){this.request = request;}@Overridepublic void update(long bytesRead, long bytesTotal, int items) {double percent= (double)bytesRead*100/(double)bytesTotal;System.out.println(df.format(percent));request.getSession().setAttribute("UPLOAD_PERCENTAGE", df.format(percent));}}upload.setProgressListener(new UploadProgressListener(request));
2.实现读取session的servlet

HttpSession session = request.getSession();Object is_begin = session.getAttribute("IS_UPLOAD_BEGIN");if(is_begin==null) return;if("0".equals(is_begin.toString())) return;PrintWriter out = response.getWriter();Object upload_percentage = session.getAttribute("UPLOAD_PERCENTAGE");out.write("{percentage:'"+upload_percentage.toString()+"'}");out.flush();
3.web端间隔时间的ajax请求

function beginUpload(){$("#progress_bar").show();setInterval("getUploadMeter()",1000);}function getUploadMeter(){$.post("UploadMeter",function(data){var json = eval("("+data+")");jQuery("#progress").css("width",json.percentage/100*200+"px");jQuery("#msg").css("padding","5px").html(json.percentage+"%");});}