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();