When the system accepts upload request it stores progress in user's session. It then reads request stream updating the progress until the stream is exhausted. When AJAX call is made to check current progress, AJAX facade can access user's session and calculate percentage. After upload is complete information about new files remains in user's session. The user has to do final AJAX call which will use these files as it sees fit.
The system supports one simultaneous upload per user's session. User may upload many files at once but if she has 2 browser windows open then she may not upload from both at the same time.
The system also restricts total size of files being uploaded. It is unable to check if any specific file is over the limit or has unsupported format - such tests performed by services after upload completes. For example when user uploads pictures into her gallery, the upload itself may succeed but the user may receive error from a picture service if she included files in format other than JPG.