Author: fmeschbe
Date: Mon Feb 17 09:19:38 2014
New Revision: 1568916

URL: http://svn.apache.org/r1568916
Log:
Support configuration of FileUpload: temporary file location, maximum file 
size, 
file storage threshold, and maximum request size

Modified:
    
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportHttpServletRequestWrapper2x.java
    
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java
    
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java
    
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/UtilTest.java

Modified: 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportHttpServletRequestWrapper2x.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportHttpServletRequestWrapper2x.java?rev=1568916&r1=1568915&r2=1568916&view=diff
==============================================================================
--- 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportHttpServletRequestWrapper2x.java
 (original)
+++ 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportHttpServletRequestWrapper2x.java
 Mon Feb 17 09:19:38 2014
@@ -31,7 +31,7 @@ public class ParameterSupportHttpServlet
     }
 
     protected final ParameterSupport getParameterSupport() {
-        return ParameterSupport.getInstance(getRequest());
+        return ParameterSupport.getInstance((HttpServletRequest) getRequest());
     }
 
     @Override

Modified: 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java?rev=1568916&r1=1568915&r2=1568916&view=diff
==============================================================================
--- 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java
 (original)
+++ 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java
 Mon Feb 17 09:19:38 2014
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.parameters.impl;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
@@ -28,6 +29,7 @@ import java.util.List;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
+
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.RequestContext;
@@ -53,12 +55,45 @@ public class ParameterSupportImpl extend
     /** Content type signaling parameters in request body */
     private static final String WWW_FORM_URL_ENC = 
"application/x-www-form-urlencoded";
 
+    /**
+     * The maximum size allowed for <tt>multipart/form-data</tt>
+     * requests
+     *
+     * <p>The default is <tt>-1L</tt>, which means unlimited.
+     */
+    private static long maxRequestSize = -1L;
+
+    /**
+     * The directory location where files will be stored
+     */
+    private static File location = null;
+
+    /**
+     * The maximum size allowed for uploaded files.
+     *
+     * <p>The default is <tt>-1L</tt>, which means unlimited.
+     */
+    private static long maxFileSize = -1L;
+
+    /**
+     * The size threshold after which the file will be written to disk
+     */
+    private static int fileSizeThreshold = 256000;
+
     private final HttpServletRequest servletRequest;
 
     private ParameterMap postParameterMap;
 
     private boolean requestDataUsed;
 
+    static void configure(final long maxRequestSize, final String location, 
final long maxFileSize,
+            final int fileSizeThreshold) {
+        ParameterSupportImpl.maxRequestSize = (maxRequestSize > 0) ? 
maxRequestSize : -1;
+        ParameterSupportImpl.location = (location != null) ? new 
File(location) : null;
+        ParameterSupportImpl.maxFileSize = (maxFileSize > 0) ? maxFileSize : 
-1;
+        ParameterSupportImpl.fileSizeThreshold = (fileSizeThreshold > 0) ? 
fileSizeThreshold : 256000;
+    }
+
     public ParameterSupportImpl(HttpServletRequest servletRequest) {
         this.servletRequest = servletRequest;
 
@@ -210,14 +245,13 @@ public class ParameterSupportImpl extend
         }
 
     private void parseMultiPartPost(ParameterMap parameters) {
-        // parameters not read yet, read now
-        // Create a factory for disk-based file items
-        DiskFileItemFactory factory = new DiskFileItemFactory();
-        factory.setSizeThreshold(256000);
 
         // Create a new file upload handler
-        ServletFileUpload upload = new ServletFileUpload(factory);
-        upload.setSizeMax(-1);
+        ServletFileUpload upload = new ServletFileUpload();
+        upload.setSizeMax(ParameterSupportImpl.maxRequestSize);
+        upload.setFileSizeMax(ParameterSupportImpl.maxFileSize);
+        upload.setFileItemFactory(new 
DiskFileItemFactory(ParameterSupportImpl.fileSizeThreshold,
+            ParameterSupportImpl.location));
 
         RequestContext rc = new 
ServletRequestContext(this.getServletRequest()) {
             public String getCharacterEncoding() {

Modified: 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java?rev=1568916&r1=1568915&r2=1568916&view=diff
==============================================================================
--- 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java
 (original)
+++ 
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java
 Mon Feb 17 09:19:38 2014
@@ -41,6 +41,9 @@ import org.apache.sling.parameters.Param
         description = "Configures Sling's request parameter handling.")
 public class Util {
 
+    //     * @see javax.servlet.annotation.MultipartConfig#maxFileSize
+//    * @see javax.servlet.annotation.MultipartConfig#maxRequestSize
+
     @Property(value = Util.ENCODING_DIRECT,
             label = "Default Parameter Encoding",
             description = "The default request parameter encoding used to 
decode request "
@@ -61,6 +64,28 @@ public class Util {
                 + "multipart/form-data parameters. The default value is " + 
ParameterMap.DEFAULT_MAX_PARAMS + ".")
     private static final String PROP_MAX_PARAMS = 
"sling.default.max.parameters";
 
+    @Property(
+            label = "Temporary File Location",
+            description = "The size threshold after which the file will be 
written to disk")
+    private static final String PROP_FILE_LOCATION = "file.location";
+
+    @Property(
+            label = "File Save Threshold",
+            description = "The size threshold after which the file will be 
written to disk")
+    private static final String PROP_FILE_SIZE_THRESHOLD = "file.threshold";
+
+    @Property(
+            label = "Maximum File Size",
+            description = "The maximum size allowed for uploaded files. The 
default is -1, which means unlimited.")
+    private static final String PROP_FILE_SIZE_MAX = "file.max";
+
+    @Property(
+            label = "Maximum Request Size",
+            description = "The maximum size allowed for multipart/form-data 
requests. The default is -1, which means unlimited.")
+    private static final String PROP_MAX_REQUEST_SIZE = "request.max";
+
+
+
     // ISO-8859-1 mapps all characters 0..255 to \u0000..\u00ff directly
     public static final String ENCODING_DIRECT = "ISO-8859-1";
 
@@ -108,6 +133,10 @@ public class Util {
         
setDefaultFixEncoding(PropertiesUtil.toString(props.get(PROP_FIX_ENCODING), 
ENCODING_DIRECT));
         
ParameterMap.setMaxParameters(PropertiesUtil.toInteger(props.get(PROP_MAX_PARAMS),
             ParameterMap.DEFAULT_MAX_PARAMS));
+        
ParameterSupportImpl.configure(PropertiesUtil.toLong(props.get(PROP_MAX_REQUEST_SIZE),
 -1),
+            PropertiesUtil.toString(props.get(PROP_FILE_LOCATION), null),
+            PropertiesUtil.toLong(props.get(PROP_FILE_SIZE_MAX), -1),
+            PropertiesUtil.toInteger(props.get(PROP_FILE_SIZE_THRESHOLD), -1));
     }
 
     public static void setDefaultFixEncoding(final String encoding) {

Modified: 
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/UtilTest.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/UtilTest.java?rev=1568916&r1=1568915&r2=1568916&view=diff
==============================================================================
--- 
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/UtilTest.java
 (original)
+++ 
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/UtilTest.java
 Mon Feb 17 09:19:38 2014
@@ -26,7 +26,6 @@ import java.util.List;
 import org.apache.sling.parameters.NamedRequestParameter;
 import org.apache.sling.parameters.impl.ContainerRequestParameter;
 import org.apache.sling.parameters.impl.ParameterMap;
-import org.apache.sling.parameters.impl.ParameterSupportImpl;
 import org.apache.sling.parameters.impl.Util;
 
 import junit.framework.TestCase;
@@ -72,28 +71,6 @@ public class UtilTest extends TestCase {
         assertEquals(Util.ENCODING_DIRECT, Util.getDefaultFixEncoding());
     }
 
-    public void test_default_fix_encoding_via_ParameterSupport() {
-        assertEquals(Util.ENCODING_DIRECT, Util.getDefaultFixEncoding());
-
-        ParameterSupportImpl.setDefaultParameterEncoding(utf8);
-        assertEquals(utf8, Util.getDefaultFixEncoding());
-
-        ParameterSupportImpl.setDefaultParameterEncoding(Util.ENCODING_DIRECT);
-        assertEquals(Util.ENCODING_DIRECT, Util.getDefaultFixEncoding());
-
-        
ParameterSupportImpl.setDefaultParameterEncoding("XX_invalid_encoding_scheme_XX");
-        assertEquals(Util.ENCODING_DIRECT, Util.getDefaultFixEncoding());
-
-        ParameterSupportImpl.setDefaultParameterEncoding(utf8);
-        assertEquals(utf8, Util.getDefaultFixEncoding());
-
-        
ParameterSupportImpl.setDefaultParameterEncoding("XX_invalid_encoding_scheme_XX");
-        assertEquals(utf8, Util.getDefaultFixEncoding());
-
-        ParameterSupportImpl.setDefaultParameterEncoding(Util.ENCODING_DIRECT);
-        assertEquals(Util.ENCODING_DIRECT, Util.getDefaultFixEncoding());
-    }
-
     public void test_fix_encoding_direct() {
 
         ParameterMap pm = new ParameterMap();


Reply via email to