Improve Upload behaviour
------------------------
Key: ADFFACES-313
URL: http://issues.apache.org/jira/browse/ADFFACES-313
Project: MyFaces ADF-Faces
Issue Type: Improvement
Environment: All, commons-upload
Reporter: Patrick Huber
Trinidad/commons-upload assume some memory and space limits for uploads which
can be configured in /WEB-INF/web.xml:
-----------
<context-param>
<param-name>org.apache.myfaces.trinidad.UPLOAD_MAX_MEMORY</param-name>
<param-value>512000</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.trinidad.UPLOAD_MAX_DISK_SPACE</param-name>
<param-value>5120000</param-value>
</context-param>
-----------
When the larger of these two values is exceeded, trinidad just trows an
EOFException. What the user sees in the browser is this:
----------
HTTP ERROR: 500
Per-request disk space limits exceeded.
RequestURI=/apache_trinidad/upload.faces
Caused by:
java.io.EOFException: Per-request disk space limits exceeded.
at
org.apache.myfaces.trinidadinternal.webapp.UploadedFileImpl.loadFile(UploadedFileImpl.java:236)
at
org.apache.myfaces.trinidadinternal.webapp.UploadedFileProcessorImpl.processFile(UploadedFileProcessorImpl.java:106)
at
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doUploadFile(TrinidadFilterImpl.java:342)
at
org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:254)
at
org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:90)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1040)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:352)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:230)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
at org.mortbay.jetty.Server.handle(Server.java:286)
at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:444)
at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:715)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:627)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:203)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:340)
at
org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270)
at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
Powered by Jetty://
----------
It is possible to add a "validator" attribute to a tr:inputFile component.
However, that validator is only invoked when the upload size is smaller than
the limits and the upload succeeds. I believe these limits really do make sense
but a 500 plus stacktrace is not very cool. I propose that trinidad writes a
FacesMessage to the FacesContext for the inputFile component and re-renders the
same page, so the user sees the normal page again with a meaningful error
message. The error message should be configurable/localizable.
I don't know much about uploading things. Maybe it's also possible to determine
the upload size before having received any data and then invoke the validator
before receiving the data, so the developer could for example apply different
size limits based on the mime-type of the upload. The inputFile component had
to be extended to contain the same information as the valueChangeListener of
the inputFile component received on its invocation.
regards
Patrick
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira