• How to Upload File in Spring MVC

    Spring MVC has a built-in MultipartFile class that is necessary to upload file in spring mvc. In order to upload file in spring mvc, we need to configure our dispatcher-servlet.xml to add the maximum file upload size, creating a controller and a logic to save the file that was uploaded. This assumes that you have already a working spring mvc project or click here on How to Create Spring MVC Project using Maven.

    1. Modify you dispatcher-servlet.xml to Upload File in Spring MVC

    Create a new bean that defines that maximum upload size of the file.

    
            <property name="maxUploadSize" value="268435456" /> 
    
    

    Your dispatcher-servlet.xml should be look somthing similar to this:

    
    
    
        <mvc:annotation-driven />
        <context:component-scan base-package="com.javapointers"/>
    
        
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        
    
        
        
            <property name="maxUploadSize" value="268435456" /> 
        
    
        <mvc:view-controller path="/" view-name="upload" />
    
    
    

    2. Create your Upload Controller

    Create a Controller class that will handle file upload in spring mvc.

    package com.javapointers.controller;
    
    import com.javapointers.service.FileService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @Controller
    public class UploadController {
    
        @Autowired
        private FileService fileService;
    
        @RequestMapping(value = "/upload", method = RequestMethod.POST)
        public ModelAndView uploadFile(@RequestParam("file") MultipartFile multipartFile){
            long fileSize = multipartFile.getSize();
            String fileName = multipartFile.getOriginalFilename();
            ModelAndView modelAndView = new ModelAndView("upload-success");
            if(fileService.saveFile(multipartFile)){
                Map<String, Object> modelMap = new HashMap<>();
                modelMap.put("fileName", fileName);
                modelMap.put("fileSize", fileSize);
                modelAndView.addAllObjects(modelMap);
                return modelAndView;
            }
            return new ModelAndView("upload-failed");
        }
    
    }
    

    3. Create a File Service

    Create a class that will save the file in the file system. In this example, the files are being saved in
    C:\Javapointers.

    package com.javapointers.service;
    
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    
    @Service("fileService")
    public class FileService {
    
        public static final String SAVE_LOCATION = "C:/Javapointers/";
    
        public boolean saveFile(MultipartFile multipartFile){
            boolean result = false;
            //set the saved location and create a directory location
            String fileName  = multipartFile.getOriginalFilename();
            String location = SAVE_LOCATION;
            File pathFile = new File(location);
            //check if directory exist, if not, create directory
            if(!pathFile.exists()){
                pathFile.mkdir();
            }
    
            //create the actual file
            pathFile = new File(location + fileName);
            //save the actual file
            try {
                multipartFile.transferTo(pathFile);
                result = true;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }
    }
    

    4. Create your jsp file

    Create an input element with the name file (as we have defined in @RequestParam(“file”)).

    
    

    Here is our upload.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Upload Javapointers</title>
    </head>
    <body>
    

    Browse And Upload your File

    <input id="file-id" type="file" name="file" /> <br/> <input type="submit" value="Upload"/>
    </body> </html>

    5. Testing our File Upload in Spring MVC application

    We now test our application. If the file successfully uploaded to the server, the request will be redirected to the successful page displaying the name of the file and its size.

    upload file in spring mvc 1

    upload file in spring mvc 2

    Download Source Code Here!

    Related Post