Apache Struts 2 Documentation > Home > FAQs > How do we upload files |

Apache Struts 2 Documentation
How do we upload files
Edit Page Browse Space Add Page Add News
Added by tm_jee, last edited by Ted Husted on Jan 28, 2007 (view change)

You can obtain the MultipartRequestWrapper from the ServletActionContext or by utilizing the `fileUpload` interceptor. The `fileUpload` interceptor is preferred.

## Ask the ServletActionContext

    MultipartRequestWrapper multipartRequest = ((MultipartRequestWrapper)ServletActionContext.getRequest())

The MultipartRequestWrapper provideds access methods such as `getFiles`, `getFile`, `getContentType`, `hasErrors`, `getErrors`, and so forth, so that you can process the file uploaded.

## Utilize the fileUpload Interceptor

_Preferred_

- Ensure that {{fileUpload }} Interceptor is included in the Action's stack.
  - The default stack already includes {{fileUpload }}.
- Ensure that the HTML form sets the `enctype` and specifies on or more file type inputs.

    <form name="myForm" enctype="multipart/form-data">
         <input type="file" name="myDoc" value="Browse ..." />
         <input type="submit" />
      </form>

- Ensure that the Action provides one or more fileUpload mutator methods, with names that correspond to name of the file type input.

    public void setMyDoc(File myDoc)
    public void setMyDocContentType(String contentType)
    public void setMyDocFileName(String filename)

- The Action may also provide the corresponding accessor methods.

    public File getMyDoc()
    public ContentType getMyDocContentType()
    public String getMyDocFileName()

### Handling multiple files

When multiple files are uploaded by a form, the files are represented by an array.

Given:

    <form name="myForm" enctype="multipart/form-data">
          <input type="file" name="myDoc" value="Browse File A ..." />
          <input type="file" name="myDoc" value="Browse File B ..." />
          <input type="file" name="myDoc" value="Browse File C ..." />
          <input type="submit" />
       </form>

The Action class can define file handling methods that accept an array.

    public void setMyDoc(File[] myDocs)
    public void setMyDocContentType(String[] contentTypes)
    public void setMyDocFileName(String[] fileNames)

The uploaded files can be handled by iterating through the appropriate array.

### Extra Information

Property | Default
--- | ---
struts.multipart.parser | Commons FileUpload
struts.multipart.saveDir | `javax.servlet.context.tempdir` as defined by container
struts.multipart.maxSize | Approximately 2M

@see struts.properties
@see org.apache.struts2.dispatcher.FilterDispatcher#doFilter(SerlvetRequest, ServletRepsonse, FilterChain)
@see org.apache.struts2.dispatcher.DispatcherUtil#wrapRequest(HttpServletRequest, SerlvetContext)
@see org.apache.struts2.dispatcher.multipart.MultipartRequestWrapper
@see org.apache.struts2.interceptor.FileUploadInterceptor