You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Patrick Fong <li...@gmail.com> on 2008/08/25 06:31:25 UTC

Problem using Commons fileupload for progress bar with Javaworld example

Hi

I'm using Apache Commons for FileUpload to do a progress bar using Ajax. I'm
using prototype for ajax. I'm having trouble trying to track the progress of
the file upload. I'm using the example at
http://www.javaworld.com/javaforums/showthreaded.php?Cat=2&Number=49773&page=0
.

Here is the relevant code ...
<snip>

   FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   CustomProgressListener l = new CustomProgressListener();
   upload.setProgressListener(l);
   fileID = Integer.parseInt(generateRandomNumber(4));
   l.setId(fileID);
   map2.put(fileID, l);
   try {
    List<FileItem> items = upload.parseRequest(req);
    System.out.println("UploadMe::process2 items "+items);
    for (Iterator<FileItem> i = items.iterator(); i.hasNext(); ) {
     FileItem item = i.next();
     System.out.println("FileUpload::process2 name "+item.getName());
     item.write(new File(PATH+item.getName()));
    }

    res.setContentType("text/html");
    System.out.println("UploadMe::process2 after parseRequest");
    PrintWriter pw = res.getWriter();
    pw.write("\n\t<html><head><title></title></head><body>");
    pw.write("<script
type=\"text/javascript\">window.parent.queryMyProgress('"+fileID+"')</script>");
    pw.write("</body></html>");
    pw.flush();
   } catch (Exception e) {
    e.printStackTrace();
   }
</snip>

I found that when the code hits 'upload.parseRequest', the servlet completes
that line, that is uploads the file before proceeding. Hence I can't track
the file upload even using the ProgressListener implementation.

The map, is just keeping track of the instance so that I can load the object
again. In the Javaworld example, they use the session.

Has anybody come across issues? How can I make sure that parseRequest is
executed, but the servlet doesn't complete the step?

Everything else (ie, AJAX communicating) works.

Cheers
Patrick

Re: Problem using Commons fileupload for progress bar with Javaworld example

Posted by Patrick Fong <li...@gmail.com>.
Hi Garrett

I'm pretty sure it uploaded the file. I know that Javaworld Example uses
iFrames. I pass javascript calls to the iFrame. The file is uploaded into
the specified the directory. The form is submitted using normal form
submission not XHR. XHR is used to track the progress of the file uploading.

My only problem is as mentioned, parseRequest method which I can't control
like a thread, because when I move the parseRequest into the run method, it
throws a NullPointerException. For some reason, HttpServletRequest object
that is the parameter of parseRequest cannot be contained in a thread.

The JVM executes parseRequest completely then subsequent lines. The servlet
won't execute parseRequest independently, so that we can track the progress.


Cheers
Patrick

2008/8/25 Garrett Smith <dh...@gmail.com>

> On Sun, Aug 24, 2008 at 9:31 PM, Patrick Fong <li...@gmail.com>
> wrote:
> > Hi
> >
> > I'm using Apache Commons for FileUpload to do a progress bar using Ajax.
> I'm
> > using prototype for ajax.
>
> Do you mean Prototype.js?
>
> http://www.prototypejs.org/learn/introduction-to-ajax
> | Ajax functionality is contained in the global Ajax object.
> | The transport for Ajax requests is xmlHttpRequest,
>
> Did you notice that the JavaWorld example is using an iframe?
>
> With the exception of Firefox, and possibly Webkit in the near future,
> you can't send a file over XHR.
>
> > I found that when the code hits 'upload.parseRequest', the servlet
> completes
> > that line, that is uploads the file before proceeding. Hence I can't
> track
> > the file upload even using the ProgressListener implementation.
> >
>
> I think you must be mistaken. The file was not uploaded. Certainly the
> servlet did not upload the file; it merely performed the task of
> processing the request it got from the container.
>
> Garrett
>
> > Cheers
> > Patrick
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Re: Problem using Commons fileupload for progress bar with Javaworld example

Posted by Garrett Smith <dh...@gmail.com>.
On Sun, Aug 24, 2008 at 9:31 PM, Patrick Fong <li...@gmail.com> wrote:
> Hi
>
> I'm using Apache Commons for FileUpload to do a progress bar using Ajax. I'm
> using prototype for ajax.

Do you mean Prototype.js?

http://www.prototypejs.org/learn/introduction-to-ajax
| Ajax functionality is contained in the global Ajax object.
| The transport for Ajax requests is xmlHttpRequest,

Did you notice that the JavaWorld example is using an iframe?

With the exception of Firefox, and possibly Webkit in the near future,
you can't send a file over XHR.

> I found that when the code hits 'upload.parseRequest', the servlet completes
> that line, that is uploads the file before proceeding. Hence I can't track
> the file upload even using the ProgressListener implementation.
>

I think you must be mistaken. The file was not uploaded. Certainly the
servlet did not upload the file; it merely performed the task of
processing the request it got from the container.

Garrett

> Cheers
> Patrick
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org