How to handle MaxUploadSizeExceededException

前端 未结 5 535
小鲜肉
小鲜肉 2020-11-29 22:52

MaxUploadSizeExceededException exception appears when I upload a file whose size exceeds the maximum allowed. I want to show an error message when this exceptio

5条回答
  •  鱼传尺愫
    2020-11-29 23:39

    I finally figured out a solution that works using a HandlerExceptionResolver.

    Add multipart resolver to your Spring config:

        
       
       
       
       
    

    Model - UploadedFile.java:

    package com.mypkg.models;
    
    import org.springframework.web.multipart.commons.CommonsMultipartFile;
    
    public class UploadedFile
    {
        private String title;
    
        private CommonsMultipartFile fileData;
    
        public String getTitle()
        {
            return title;
        }
    
        public void setTitle(String title)
        {
            this.title = title;
        }
    
        public CommonsMultipartFile getFileData()
        {
            return fileData;
        }
    
        public void setFileData(CommonsMultipartFile fileData)
        {
            this.fileData = fileData;
        }
    
    }
    

    View - /upload.jsp:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
        
            Test File Upload
        
        
            

    Select a file to upload

    ${errors}.

    Controller - FileUploadController.java: package com.mypkg.controllers;

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.multipart.MaxUploadSizeExceededException;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.mypkg.models.UploadedFile;
    
    @Controller
    public class FileUploadController  implements HandlerExceptionResolver
    {
        @RequestMapping(value = "/upload", method = RequestMethod.GET)
        public String getUploadForm(Model model)
        {
            model.addAttribute("uploadedFile", new UploadedFile());
            return "/upload";
        }
    
        @RequestMapping(value = "/upload", method = RequestMethod.POST)
        public String create(UploadedFile uploadedFile, BindingResult result)
        {
            // Do something with the file
            System.out.println("#########  File Uploaded with Title: " + uploadedFile.getTitle());
            System.out.println("#########  Creating local file: /var/test-file-upload/" + uploadedFile.getFileData().getOriginalFilename());
    
            try
            {
    
                InputStream in = uploadedFile.getFileData().getInputStream();
                FileOutputStream f = new FileOutputStream(
                        "/var/test-file-upload/" + uploadedFile.getFileData().getOriginalFilename());
                int ch = 0;
                while ((ch = in.read()) != -1)
                {
                    f.write(ch);
                }
                f.flush();
                f.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
    
            return "redirect:/";
        }
    
        /*** Trap Exceptions during the upload and show errors back in view form ***/
        public ModelAndView resolveException(HttpServletRequest request,
                HttpServletResponse response, Object handler, Exception exception)
        {        
            Map model = new HashMap();
            if (exception instanceof MaxUploadSizeExceededException)
            {
                model.put("errors", exception.getMessage());
            } else
            {
                model.put("errors", "Unexpected error: " + exception.getMessage());
            }
            model.put("uploadedFile", new UploadedFile());
            return new ModelAndView("/upload", model);
        }
    
    }
    
    ========================================================================
    

提交回复
热议问题