Commons Fileupload ProgressListener

Snipex

Grünschnabel
Hallo zusammen folgende Problemstellung

ich habe versucht den Commons Fileupload Progresslistener zu benutzen.

Code:
//Create a progress listener
ProgressListener progressListener = new ProgressListener(){
   private long megaBytes = -1;
   public void update(long pBytesRead, long pContentLength, int pItems) {
       long mBytes = pBytesRead / 1000000;
       if (megaBytes == mBytes) {
           return;
       }
       megaBytes = mBytes;
       System.out.println("We are currently reading item " + pItems);
       if (pContentLength == -1) {
           System.out.println("So far, " + pBytesRead + " bytes have been read.");
       } else {
           System.out.println("So far, " + pBytesRead + " of " + pContentLength
                              + " bytes have been read.");
       }
   }
};

das ganze ruf ich direkt nach dem hier auf :

Code:
List /* FileItem */ items = upload.parseRequest(request);
upload.setProgressListener(progressListener);

ok jetzt das Problem :

das ganze funktioniert echt gut solange es sich um einen System.out.println handelt.
da es relativ gesehen nicht viel sinn macht das auf den System.out zu geben sondern
mit der response was mitzuschicken und somit z.B. einen Progress Bar darzustellen.

mein versuch anstelle von :
Code:
           System.out.println("So far, " + pBytesRead + " of " + pContentLength
                              + " bytes have been read.");

dieses hier zu verwenden :

Code:
 		    		    PrintWriter outText = response.getWriter(); 
  		    		    outText.println(pBytesRead);

ist kläglich gescheitert und zwar aus folgendem Grund :

da der ProgressListener in Commons Fileupload ein Interface ist ruf ich das ganze in einem Jsp am anfang und während meines Uploads auf.

Error : cannot referal to non-final variable in a inner class .....

ist ja klar verständlich nun habe ich folgendes probiert :

Code:
super.getClass().response.getWriter();

keine chance bin mitlerweile echt ratlos.

pls help me ich hoffe das ich da was übersehen habe.
 
Jawohl habe das Problem gelöst :

das problem besteht ja, aus einer Inner Class in JSP in die outerClass was weiterzugeben,

-->umgekehrtes Prinzip sprich von aussen nach innen ;)

Code:
    class MyListener implements ProgressListener
    {

           private long kiloBytes = -1;
 
           private HttpSession session = null;
           private HttpServletRequest request = null;
           public void update(long pBytesRead, long pContentLength, int pItems) {
        	   
      	   
               long kBytes = pBytesRead / 10000;
               if (kiloBytes == kBytes) {
                       return;
               }
               kiloBytes = kBytes;
               if (pContentLength == -1) {
                  
               } else {

		session.setAttribute(md10hash + "bytesLoaded", pBytesRead);
               }
           }

 
          public void setSession(HttpSession session){
               this.session = session;
           }
           public void setRequest(HttpServletRequest request){
               this.request = request;
           }
}

	    MyListener progressListener = new MyListener();
	    progressListener.setSession(session);
	    progressListener.setRequest(request);

somit kannst du von dem Progresslistener in die Session und den Request usw.. schreiben

habe es schlussendlich mit AJAX und der Session gelöst ;)

die Response kannst du vergessen die kommt so oder so erst nach dem Progresslistener ;) --> AJAX
 
Zuletzt bearbeitet:
wie rufe ich den ProgressListener eigentlich so auf das er auf der Seite stetig aktualisiert wird ?

Mfg Chimaira
 

Neue Beiträge

Zurück