[ 
https://issues.apache.org/jira/browse/FILEUPLOAD-194?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13598824#comment-13598824
 ] 

Simone Tripodi edited comment on FILEUPLOAD-194 at 3/11/13 1:55 PM:
--------------------------------------------------------------------

A possible workaround to handle that situation would be switching to [Streaming 
APIs|http://commons.apache.org/proper/commons-fileupload/streaming.html], kind 
of:

{code}
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();

// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
    try {
        FileItemStream item = iter.next();
        FileItem fileItem = fileItemFactory.createItem(item.getFieldName(),
                                                       item.getContentType(),
                                                       item.isFormField(),
                                                       item.getName());
        Streams.copy(item.openStream(), fileItem.getOutputStream(), true);
        items.add(fileItem);
    } catch (Throwable t) {
        // handle this
    }
}
{code}

[~maurizio.cucchiara] any chance you can verify it in Struts? Do you have any 
testcase? TIA! :)
                
      was (Author: simone.tripodi):
    A possible workaround to handle that situation would be switching to 
[Streaming 
APIs|http://commons.apache.org/proper/commons-fileupload/streaming.html], kind 
of:

{code}
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();

// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
    try {
    
        FileItemStream item = iter.next();
        FileItem fileItem = fileItemFactory.createItem(item.getFieldName(),
                                                       item.getContentType(),
                                                       item.isFormField(),
                                                       item.getName());
        Streams.copy(item.openStream(), fileItem.getOutputStream(), true);
        items.add(fileItem);
    } catch (Throwable t) {
        // handle this
    }
}
{code}

[~maurizio.cucchiara] any chance you can verify it in Struts? Do you have any 
testcase? TIA! :)
                  
> conceptual error throwing FileUploadException when upload size or file size 
> exeeds limits
> -----------------------------------------------------------------------------------------
>
>                 Key: FILEUPLOAD-194
>                 URL: https://issues.apache.org/jira/browse/FILEUPLOAD-194
>             Project: Commons FileUpload
>          Issue Type: Bug
>    Affects Versions: 1.2.2
>            Reporter: Hanspeter Dünnenberger
>         Attachments: my-changes.patch
>
>
> When any size limits exceed, immediately a 
> FileUploadBase.SizeLimitExceededException or 
> FileUploadBase.FileSizeLimitExceededException is thrown and parsing of the 
> multipart request terminates without providing request parameters for further 
> processing.
> This basically makes it impossible for any web application to handle size 
> limit exceeded cases gracefully. 
> My proposal is that request parsing should always complete to deliver the 
> request parameters. Size limit exceeded cases/exceptions might be collected 
> for later retrieval, FileSizeLimitExeededException should be mapped to the 
> FileItem to allow some validation on the FileItem on application level. This 
> would allow to mark upload input fields as erronous if the uploaded file was 
> too big. 
> Actually I made a patch for that (see attachment). With this patch, 
> commons-fileupload always completes request parsing in case of size limit 
> exceedings and only after complete parsing will throw an exception if one was 
> detected. Using FileUploadBase.setThrowUploadException(false) no exceptions 
> will be thrown (except more critical ones like invalid stream format).
> After request processing the collected FileUploadExceptions might be 
> retrieved using FileUploadBase.getFileUploadExceptions().
> The patch shows the concept, but further improvement might be necessary.

--
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

Reply via email to