Comments from Mike Wilson:
I think maybe it is good if there is also an option to get the progress data without using reverse ajax. There has been some demand to run DWR 2 with reverse ajax taken out as not to have ScriptSessons consume memory.
Also, as polling currently is the "safest" alternative for reverse Ajax there may be unnecessary bandwidth wasted if progress data is written to the browser for each packet received, but the browser only polls every 5 seconds (as only the last progress info of potentially many is interesting). This could either be solved by having the progress data "sync" with poll intervals, or by having the browser explicitly ask for progress data with a function call.
The last suggestion is also in line with the need for a responsive progress bar. You probably want to update it every 0.5-1.0 seconds, but this rate may be unnecessary high outside file uploads if you have many simultaneous clients. So instead of having to change poll rate during an upload and also fix the sync stuff on the server you may prefer the "naive" solution; running your own window.setInterval() calling a function on the server returning progress data.
Also, If there are two files being uploaded in one call then I think it will be sufficient with only one progress bar indicating progress for the whole POST.
Attached a simple file upload widget.