Close

Spring MVC - Using javax.servlet.http.Part as handler method argument to handle file upload

This example shows how to use javax.servlet.http.Part as controller method parameter for uploading a file.

@Controller
@RequestMapping("/upload")
public class FileUploadController {
  public static final String TargetFolder = "d:/filesUploaded/";
    .............
  @PostMapping
  public String handlePostRequest(@RequestPart("user-file") Part part,
                                  Model model) throws IOException {

      String name = extractFileName(part);
      InputStream inputStream = part.getInputStream();
      Files.copy(inputStream, Paths.get(TargetFolder + name), StandardCopyOption.REPLACE_EXISTING);
      model.addAttribute("msg", "File has been uploaded:  " + name);
      return "response";
  }

  private String extractFileName(Part part) {
      String disposition = part.getHeader("Content-Disposition");
      String fileName = disposition
              .replaceFirst("(?i)^.*filename=\"?([^\"]+)\"?.*$", "$1");
      return fileName;
  }
}

Running example

To try examples, run embedded tomcat (configured in pom.xml of example project below):

mvn tomcat7:run-war

From browser access 'http://localhost:8080/upload', choose file to upload and submit. Your selected file will be saved under 'd:/filesUploaded/' directory.

Example Project

Dependencies and Technologies Used:

  • spring-webmvc 5.0.3.RELEASE: Spring Web MVC.
  • javax.servlet-api 3.0.1 Java Servlet API
  • jstl 1.2 javax.servlet:jstl
  • JDK 1.8
  • Maven 3.3.9

spring-file-upload-servlet-part Select All Download
  • spring-file-upload-servlet-part
    • src
      • main
        • java
          • com
            • logicbig
              • example
        • webapp
          • WEB-INF
            • views

See Also