日期:2014-05-18  浏览次数:20653 次

struts2文件上传进度条问题
有做过struts2文件上传进度条的大神么?
我按照网上的做法,为什么不能成功:
我编写一个类MyMultiPartRequest,实现 MultiPartRequest接口,并且把JakartaMultiPartRequest的代码全都拷贝过来,然后修改parseRequest方法。改后方法如下:

  private List<FileItem> parseRequest(HttpServletRequest servletRequest, String saveDir) throws FileUploadException {
        DiskFileItemFactory fac = createDiskFileItemFactory(saveDir);
        ServletFileUpload upload = new ServletFileUpload(fac);
        //添加监听器
        upload.setProgressListener(new ProgressListener() {
            @Override
            public void update(long pBytesRead, long pContentLength, int pItems) {
                int percent = (int) (((float)pBytesRead / (float)pContentLength) * 100);
                ActionContext.getContext().getSession().put("process", percent + "%");//将进度百分比放到session中。
                System.out.println("--------"+percent);//输出一下上传的进度
            }
        });

        upload.setSizeMax(maxSize);
        return upload.parseRequest(createRequestContext(servletRequest));
    }




然后就是在struts.xml中配置该解析器:MyMultiPartRequest。如下:
<!--ProgressListener -->
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="requestParser"
        class="com.gycenter.listener.MyMultiPartRequest" scope="default"/>
 <constant name="struts.multipart.handler" value="requestParser" />
<!-- ProgressListener end -->

class="com.gycenter.listener.MyMultiPartRequest"是我上面那个解析器类所在的包路径
就这样了。然后前台我是使用ajax每隔一秒调用一个方法,这个方法就是去拿session中的那个上传的百分比 该方法如下:
 

   public  void  uploadProgress(){
try {
String  process = (String) ActionContext.getContext().getSession().get("process");
    System.out.println("文件已经上传"+process);