public abstract class CommonsFileUploadSupport extends Object
Provides common configuration properties and parsing functionality for multipart requests, using a Map of Spring CommonsMultipartFile instances as representation of uploaded files and a String-based parameter Map as representation of uploaded form fields.
Subclasses implement concrete resolution strategies for Servlet or Portlet environments: see CommonsMultipartResolver and CommonsPortletMultipartResolver, respectively. This base class is not tied to either of those APIs, factoring out common functionality.
CommonsMultipartFile
,
CommonsMultipartResolver
,
CommonsPortletMultipartResolver
Modifier and Type | Class and Description |
---|---|
protected static class |
CommonsFileUploadSupport.MultipartParsingResult
Holder for a Map of Spring MultipartFiles and a Map of
multipart parameters.
|
Constructor and Description |
---|
CommonsFileUploadSupport()
Instantiate a new CommonsFileUploadSupport with its
corresponding FileItemFactory and FileUpload instances.
|
Modifier and Type | Method and Description |
---|---|
protected void |
cleanupFileItems(MultiValueMap<String,MultipartFile> multipartFiles)
Cleanup the Spring MultipartFiles created during multipart parsing,
potentially holding temporary data on disk.
|
protected CommonsMultipartFile |
createMultipartFile(org.apache.commons.fileupload.FileItem fileItem)
Create a
CommonsMultipartFile wrapper for the given Commons FileItem . |
protected String |
getDefaultEncoding() |
org.apache.commons.fileupload.disk.DiskFileItemFactory |
getFileItemFactory()
Return the underlying
org.apache.commons.fileupload.disk.DiskFileItemFactory
instance. |
org.apache.commons.fileupload.FileUpload |
getFileUpload()
Return the underlying
org.apache.commons.fileupload.FileUpload
instance. |
protected boolean |
isUploadTempDirSpecified() |
protected org.apache.commons.fileupload.disk.DiskFileItemFactory |
newFileItemFactory()
Factory method for a Commons DiskFileItemFactory instance.
|
protected abstract org.apache.commons.fileupload.FileUpload |
newFileUpload(org.apache.commons.fileupload.FileItemFactory fileItemFactory)
Factory method for a Commons FileUpload instance.
|
protected CommonsFileUploadSupport.MultipartParsingResult |
parseFileItems(List<org.apache.commons.fileupload.FileItem> fileItems,
String encoding)
Parse the given List of Commons FileItems into a Spring MultipartParsingResult,
containing Spring MultipartFile instances and a Map of multipart parameter.
|
protected org.apache.commons.fileupload.FileUpload |
prepareFileUpload(String encoding)
Determine an appropriate FileUpload instance for the given encoding.
|
void |
setDefaultEncoding(String defaultEncoding)
Set the default character encoding to use for parsing requests,
to be applied to headers of individual parts and to form fields.
|
void |
setMaxInMemorySize(int maxInMemorySize)
Set the maximum allowed size (in bytes) before uploads are written to disk.
|
void |
setMaxUploadSize(long maxUploadSize)
Set the maximum allowed size (in bytes) before an upload gets rejected.
|
void |
setMaxUploadSizePerFile(long maxUploadSizePerFile)
Set the maximum allowed size (in bytes) for each individual file before
an upload gets rejected.
|
void |
setPreserveFilename(boolean preserveFilename)
Set whether to preserve the filename as sent by the client, not stripping off
path information in
CommonsMultipartFile.getOriginalFilename() . |
void |
setUploadTempDir(Resource uploadTempDir)
Set the temporary directory where uploaded files get stored.
|
protected final Log logger
public CommonsFileUploadSupport()
public org.apache.commons.fileupload.disk.DiskFileItemFactory getFileItemFactory()
org.apache.commons.fileupload.disk.DiskFileItemFactory
instance. There is hardly any need to access this.public org.apache.commons.fileupload.FileUpload getFileUpload()
org.apache.commons.fileupload.FileUpload
instance. There is hardly any need to access this.public void setMaxUploadSize(long maxUploadSize)
maxUploadSize
- the maximum upload size allowedFileUploadBase.setSizeMax(long)
public void setMaxUploadSizePerFile(long maxUploadSizePerFile)
maxUploadSizePerFile
- the maximum upload size per fileFileUploadBase.setFileSizeMax(long)
public void setMaxInMemorySize(int maxInMemorySize)
maxInMemorySize
- the maximum in memory size allowedDiskFileItemFactory.setSizeThreshold(int)
public void setDefaultEncoding(String defaultEncoding)
If the request specifies a character encoding itself, the request
encoding will override this setting. This also allows for generically
overriding the character encoding in a filter that invokes the
ServletRequest.setCharacterEncoding
method.
defaultEncoding
- the character encoding to useServletRequest.getCharacterEncoding()
,
ServletRequest.setCharacterEncoding(java.lang.String)
,
WebUtils.DEFAULT_CHARACTER_ENCODING
,
FileUploadBase.setHeaderEncoding(java.lang.String)
protected String getDefaultEncoding()
public void setUploadTempDir(Resource uploadTempDir) throws IOException
IOException
WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE
protected boolean isUploadTempDirSpecified()
public void setPreserveFilename(boolean preserveFilename)
CommonsMultipartFile.getOriginalFilename()
.
Default is "false", stripping off path information that may prefix the actual filename e.g. from Opera. Switch this to "true" for preserving the client-specified filename as-is, including potential path separators.
MultipartFile.getOriginalFilename()
,
CommonsMultipartFile.setPreserveFilename(boolean)
protected org.apache.commons.fileupload.disk.DiskFileItemFactory newFileItemFactory()
Default implementation returns a standard DiskFileItemFactory. Can be overridden to use a custom subclass, e.g. for testing purposes.
protected abstract org.apache.commons.fileupload.FileUpload newFileUpload(org.apache.commons.fileupload.FileItemFactory fileItemFactory)
To be implemented by subclasses.
fileItemFactory
- the Commons FileItemFactory to build uponprotected org.apache.commons.fileupload.FileUpload prepareFileUpload(String encoding)
Default implementation returns the shared FileUpload instance if the encoding matches, else creates a new FileUpload instance with the same configuration other than the desired encoding.
encoding
- the character encoding to useprotected CommonsFileUploadSupport.MultipartParsingResult parseFileItems(List<org.apache.commons.fileupload.FileItem> fileItems, String encoding)
fileItems
- the Commons FileIterms to parseencoding
- the encoding to use for form fieldsCommonsMultipartFile.CommonsMultipartFile(org.apache.commons.fileupload.FileItem)
protected CommonsMultipartFile createMultipartFile(org.apache.commons.fileupload.FileItem fileItem)
CommonsMultipartFile
wrapper for the given Commons FileItem
.fileItem
- the Commons FileItem to wrapsetPreserveFilename(boolean)
,
CommonsMultipartFile.setPreserveFilename(boolean)
protected void cleanupFileItems(MultiValueMap<String,MultipartFile> multipartFiles)
Deletes the underlying Commons FileItem instances.
multipartFiles
- Collection of MultipartFile instancesFileItem.delete()