Augment JakartaMultiPartRequest to include optional progress listener
---------------------------------------------------------------------
Key: WW-3526
URL: https://issues.apache.org/jira/browse/WW-3526
Project: Struts 2
Issue Type: New Feature
Components: Dispatch Filter
Affects Versions: Future
Environment: N/A
Reporter: Bob Glamm
Priority: Minor
Fix For: Future
Original concept from David Casserly: see http://www.devedup.com/ajaxfileupload/
The basic idea is to augment JakartaMultiPartRequest to allow users to specify
a file upload progress listener (see Commons FileUpload
ServletFileUpload.setProgressListener()). The original concept by Casserly
references a specific ProgressMonitor class that implements FileUpload's
ProgressListener interface. I'd propose an alternate solution: allow the user
to configure the fully-qualified name of an optional listener class via
@Inject("struts.multipart.monitor"), then:
o require the listener class to also implement an interface that specifies
public void abort(); as its only method;
o in JakartaMultiPartRequest.parseRequest(), attempting to instantiate the
specified listener class via Class.forName().newInstance();
o store the instantiated listener in the session, as per Casserly's example;
o in JakartaMultiPartRequest.parse(), in the catch(FileUploadException)
block, calling the abort() method on the listener class if it is in the session.
Users can then implement an action that retrieves the upload status (via AJAX
or some other mechanism) by retrieving their listener object from the session
(as per Casserly's example.) AJAX retrieval allows implementation of file
upload progress bars, a la GMail's attachment upload mechanism.
One possible issue I see with this is: what happens if multiple file upload
requests happen simultaneously for a user session?
I have a partial implementation but I'm not familiar with the Struts
development process or philosophies, so I'm throwing this out there for review.
If there are better ways to do this, let me know. I can (eventually) provide
a patch to 2.2.1 or HEAD with a little assistance, I think.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.