You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Simone Tripodi (JIRA)" <ji...@apache.org> on 2013/03/07 10:30:19 UTC

[jira] [Updated] (FILEUPLOAD-142) ProgressListener and Streaming API improvement

     [ https://issues.apache.org/jira/browse/FILEUPLOAD-142?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Simone Tripodi updated FILEUPLOAD-142:
--------------------------------------

    Fix Version/s:     (was: 1.3)
    
> ProgressListener  and Streaming API improvement
> -----------------------------------------------
>
>                 Key: FILEUPLOAD-142
>                 URL: https://issues.apache.org/jira/browse/FILEUPLOAD-142
>             Project: Commons FileUpload
>          Issue Type: Improvement
>    Affects Versions: 1.2.2
>         Environment: ANY
>            Reporter: Bohdan Bobylak
>            Priority: Minor
>         Attachments: fileupload-142.patch
>
>
> This relates to the "Watching progress"  section of the FileUpload "User Guide".
> As we know the ProgressListener has the only method:  void update(long pBytesRead, long pContentLength, int pItems) ;
> And it passes only:
>     pBytesRead - The total number of bytes, which have been read so far.
>     pContentLength - The total number of bytes, which are being read.
>     pItems - The number of the field, which is currently being read.
> It would be great to have access to some basic info about item currently uploaded from the 'update' method.
> For example: in some cases (ex.: multipart/replace response) it is needed to skip field items and output progress info only about file(s) being uploaded.
> I think the following changes will help:
> ==========================================
> ----------------------------------------------------------
> 1. Introduce new interface:
> interface Item {
>    String 	getContentType()
>    String 	getFieldName()
>    String 	getName()
>   boolean   isFormField() 
> }
> ---------------------------------------------------------
> 2. Change (or and new) 'update' method:
> void update(long pBytesRead, long pContentLength, int pItems, Item item) ;
> Here we pass Item - not the FileItemSteam referense becase we should not be able to access openStream() method of the FileItemStream.
> ---------------------------------------------------------
> 3. Change FileItemStream interface as follows:
> interface FileItemStream extends Item{
>    java.io.InputStream 	openStream();
> }
> ... and change FileItemStreamImpl implementation (if needed)
> ----------------------------------------------------------
> 4. Change ProgressNotifier as follows:
> static class ProgressNotifier {
>     .....
>     // Add this field
>     private Item curItem;
>     .....
>     // Change the noteItem() method as follows
>      void noteItem(Item item) {
>               ++items;
>               curItem = item;    
>      }
>      // Change the notifyListener() method
>     private void notifyListener() {
>         if (listener != null) {
>             listener.update(bytesRead, contentLength, items, curItem);
>         }
>     }
> }
> --------------------------------------------------------------
> 5. Change calls from 'notifier.noteItem()' to 'notifier.noteItem(currentItem)' in the
>     FileItemIteratorImpl.findNextItem() method of the  FileUploadBase file.
> ====================================
> Hope my explanation of the improvement is clear.
> Thank you.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira