`

(转)springmvc 实现上传百分比,上传进度条

阅读更多

 在项目中使用的是springmvc,在spring mvc中的上传文件的功能做的很多好,项目中使用都很方便。最近做的项目要实现上传显示上传进度,百分比;但是发现springmvc貌似没有实现这样的功能,所以就只有自己来小小的扩展一下。

       springmvc中内部上传使用的是fileupload,而其实fileupload是提供了上传监控的功能的,了解了这个之后实现起来就简单了。

1.  首先跟踪一下org.springframework.web.multipart.commons.CommonsMultipartResolver这个类默认的实现,最后发现在parseRequest这个方法中能够获取到FileUpload对象

2.  创建一个类MultipartListenerResolver,继承CommonsMultipartResolver,覆盖方法parseRequest

Java代码  收藏代码
  1. public class MultipartListenerResolver extends CommonsMultipartResolver {  
  2.   
  3.     @Override  
  4.     protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {  
  5.       String encoding = determineEncoding(request);  
  6.       FileUpload fileUpload = prepareFileUpload(encoding);  
  7.       //设置监听器  
  8.       fileUpload.setProgressListener(new FileUploadProgressListener(request.getSession()));  
  9.       try {  
  10.           List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);  
  11.           return parseFileItems(fileItems, encoding);  
  12.       } catch (FileUploadBase.SizeLimitExceededException ex) {  
  13.           throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);  
  14.       } catch (FileUploadException ex) {  
  15.           throw new MultipartException("Could not parse multipart servlet request", ex);  
  16.       }  
  17.     }
  18. }  

 3. 创建监听器类FileUploadProgressListener,构造方法接收一个session对象,把当前上传的进度发入到session中

  Java代码  收藏代码

  1. public class FileUploadProgressListener implements ProgressListener {  
  2.   
  3.     private HttpSession session;  
  4.   
  5.     public FileUploadProgressListener(HttpSession session) {  
  6.         this.session = session;  
  7.     }  
  8.   
  9.         //pBytesRead  已经上传的大小  
  10.         //pContentLength   文件总大小  
  11.     @Override  
  12.     public void update(long pBytesRead, long pContentLength, int pItems) {  
  13.         System.out.println((double)pBytesRead/pContentLength);  
  14.         session.setAttribute("progress", (double)pBytesRead/pContentLength);
  15.     }  
  16. }  

4. 最后就可以直接对外提供一个接口来从session中读取上传的进度,前台通过ajax来访问

 

转自: http://silentwu.iteye.com/blog/2142530

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics