Servlet 3 File Upload - @MultipartConfig, Part With Examples

Today we will look into Servlet 3 File Upload Example using @MultipartConfig annotation and javax.servlet.http.Part. Sometime back I wrote an article about Servlet File Upload and I used Apache FileUpload API but here we will use Servlet 3 File Upload feature.

Servlet 3 File Upload

Since File Upload is a common task in web applications, Servlet Specs 3.0 provided additional support for uploading files to server and we don’t have to depend on any third party APIs for this. In this tutorial we will see how we can use Servlet 3.0 API for uploading Files to server.

MultipartConfig

We need to annotate File Upload handler servlet with MultipartConfig annotation to handle multipart/form-data requests that is used for uploading file to server. MultipartConfig annotation has following attributes:

  • fileSizeThreshold: We can specify the size threshold after which the file will be written to disk. The size value is in bytes, so 1024*1024*10 is 10 MB.
  • location: Directory where files will be stored by default, it’s default value is “”.
  • maxFileSize: Maximum size allowed to upload a file, it’s value is provided in bytes. It’s default value is -1L means unlimited.
  • maxRequestSize: Maximum size allowed for multipart/form-data request. Default value is -1L that means unlimited.

Read more about annotations at Java Annotations Tutorial.

Part Interface

Part interface represents a part or form item that was received within a multipart/form-data POST request. Some important methods are getInputStream(), write(String fileName) that we can use to read and write file.

HttpServletRequest Changes

New methods got added in HttpServletRequest to get all the parts in multipart/form-data request through getParts() method. We can get a specific part using getPart(String partName) method.

Let’s see a simple project where we will use above API methods to upload file using servlet. Our project structure will look like below image.

Servlet-File-Upload-Project

HTML Form

We have a simple html page where we can select the file to upload and submit request to server to get it uploaded.

index.html

File Upload Servlet

Here is our File Upload Servlet implementation.

FileUploadServlet.java

Notice the use of @MultipartConfig annotation to specify different size parameters for upload file. We need to use request header “content-disposition” attribute to get the file name sent by client, we will save the file with same name.

The directory location is relative to web application where I am saving the file, you can configure it to some other location like in Apache Commons FileUpload example.

Response JSP

A simple JSP page that will be sent as response to client once the file is uploaded successfully to server.

response.jsp

Deployment Descriptor

There is nothing new in web.xml file for servlet file upload, it’s only used to make the index.html as welcome file.

web.xml

Now when we run the application, we get following pages as response.

The logs will show the directory location where file is saved and content-disposition header information.

I am running Tomcat through Eclipse, that’s why file location is like this. If you run tomcat through command line and deploy application by exporting as WAR file into webapps directory, you will get different structure but a clear one.

By admin

Leave a Reply

%d bloggers like this: