diff --git a/spring-mvc-forms/pom.xml b/spring-mvc-forms/pom.xml
index c0cac4d349..31a0c38791 100644
--- a/spring-mvc-forms/pom.xml
+++ b/spring-mvc-forms/pom.xml
@@ -41,7 +41,11 @@
${hibernate-validator.version}
-
+
+ commons-fileupload
+ commons-fileupload
+ ${fileupload.version}
+
@@ -93,6 +97,7 @@
1.8
5.3.3.Final
enter-location-of-server
+ 1.3.2
diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java
index 998f070c02..3f7889422f 100644
--- a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java
+++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java
@@ -3,6 +3,8 @@ package com.baeldung.springmvcforms.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import org.springframework.web.multipart.MultipartResolver;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@@ -26,4 +28,10 @@ class ApplicationConfiguration extends WebMvcConfigurerAdapter {
return bean;
}
+ @Bean
+ public MultipartResolver multipartResolver() {
+ CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
+ multipartResolver.setMaxUploadSize(5242880);
+ return multipartResolver;
+ }
}
diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/FileUploadController.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/FileUploadController.java
new file mode 100644
index 0000000000..07f235d317
--- /dev/null
+++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/FileUploadController.java
@@ -0,0 +1,52 @@
+package com.baeldung.springmvcforms.controller;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.multipart.MaxUploadSizeExceededException;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.ModelAndView;
+
+@Controller
+public class FileUploadController implements HandlerExceptionResolver {
+
+ @RequestMapping(value = "/uploadFile", method = RequestMethod.GET)
+ public String getImageView() {
+ return "file";
+ }
+
+ @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
+ public ModelAndView uploadFile(MultipartFile file) throws IOException{
+ ModelAndView modelAndView = new ModelAndView("file");
+
+ InputStream in = file.getInputStream();
+ File currDir = new File(".");
+ String path = currDir.getAbsolutePath();
+ FileOutputStream f = new FileOutputStream(path.substring(0, path.length()-1)+ file.getOriginalFilename());
+ int ch = 0;
+ while ((ch = in.read()) != -1) {
+ f.write(ch);
+ }
+ f.flush();
+ f.close();
+
+ modelAndView.getModel().put("message", "File uploaded successfully!");
+ return modelAndView;
+ }
+
+ @Override
+ public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object, Exception exc) {
+ ModelAndView modelAndView = new ModelAndView("file");
+ if (exc instanceof MaxUploadSizeExceededException) {
+ modelAndView.getModel().put("message", "File size exceeds limit!");
+ }
+ return modelAndView;
+ }
+}
diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/interceptor/FileUploadExceptionAdvice.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/interceptor/FileUploadExceptionAdvice.java
new file mode 100644
index 0000000000..3f1c09eeef
--- /dev/null
+++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/interceptor/FileUploadExceptionAdvice.java
@@ -0,0 +1,19 @@
+package com.baeldung.springmvcforms.interceptor;
+
+import org.springframework.web.servlet.ModelAndView;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.web.multipart.MaxUploadSizeExceededException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+@ControllerAdvice
+public class FileUploadExceptionAdvice {
+
+ @ExceptionHandler(MaxUploadSizeExceededException.class)
+ public ModelAndView handleMaxSizeException(MaxUploadSizeExceededException exc, HttpServletRequest request, HttpServletResponse response){
+ ModelAndView modelAndView = new ModelAndView("file");
+ modelAndView.getModel().put("message", "File too large!");
+ return modelAndView;
+ }
+}
\ No newline at end of file
diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/file.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/file.jsp
new file mode 100644
index 0000000000..0ed8dae5ed
--- /dev/null
+++ b/spring-mvc-forms/src/main/webapp/WEB-INF/views/file.jsp
@@ -0,0 +1,23 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+
+
+
+Upload file
+
+
+
+
+
+${message }
+
+
+
+
\ No newline at end of file