A temporary solution:

Overide multipartFilter to put multipartRequest into session(Put this class 
anywhere in application source):

  | @Startup
  | @Scope(APPLICATION)
  | @Name("org.jboss.seam.web.multipartFilter")
  | @Install(precedence = Install.APPLICATION)
  | @BypassInterceptors
  | @Filter(within={"org.jboss.seam.web.ajax4jsfFilter", 
"org.jboss.seam.web.exceptionFilter"})
  | public class MonitoredMultipartFilter extends MultipartFilter {
  |     
  |     @Override
  |     public void doFilter(final ServletRequest request, final 
ServletResponse response, final FilterChain chain)
  |     throws IOException, ServletException {
  |     if (!(response instanceof HttpServletResponse)) {
  |         chain.doFilter(request, response);
  |         return;
  |     }
  |     
  |     final HttpServletRequest httpRequest = (HttpServletRequest) request;
  |     
  |     if (isMultipartRequest(httpRequest)) {
  |             processMultipart(httpRequest, response, chain);
  |     } else chain.doFilter(request, response);
  |     }
  |     
  |     private void processMultipart(HttpServletRequest httpRequest, 
ServletResponse response, FilterChain chain)
  |     throws IOException, ServletException {
  |     
  |     MultipartRequest multipartRequest = new MultipartRequest(httpRequest, 
getCreateTempFiles(), getMaxRequestSize());
  |     HttpSession httpSession = httpRequest.getSession(false);
  |     if (httpSession != null) {
  |         httpSession.setAttribute("MULITIPART_REQUESET", multipartRequest);
  |     }
  |     
  |     chain.doFilter(multipartRequest, response);
  |     
  |     }
  |     
  |     private boolean isMultipartRequest(HttpServletRequest request) {
  |     if (!"post".equals(request.getMethod().toLowerCase())) {
  |         return false;
  |     }
  |     
  |     String contentType = request.getContentType();
  |     if (contentType == null) {
  |         return false;
  |     }
  |     
  |     if (contentType.toLowerCase().startsWith(MULTIPART)) {
  |         return true;
  |     }
  |     
  |     return false;
  |     }
  | }
  | 

And in the backing seam component:

  |     @In(value="MULITIPART_REQUESET",required=false) private 
MultipartRequest multipartRequest;
  |     private static final String UPLOAD_COMPONENT_ID_IN_HTML = 
"uploadForm:upload";
  | 
  |     @WebRemote
  |     public Integer uploadPercentage() {
  |     int uploadsize = 
multipartRequest.getFileSize(UPLOAD_COMPONENT_ID_IN_HTML);
  |     int totalsize = multipartRequest.getContentLength();
  |     if (uploadsize>=0 && totalsize>=0) {
  |         Integer progress = (int)Math.floor(((double)uploadsize / (double) 
totalsize) * 100.0);
  |         return progress;
  |     } else return null;
  |     }
  | 

Now seam remoting can access uploadPercentage() method to get the progress.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4098102#4098102

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4098102
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to